切片 DataFrame 并使用 "for" 循环将其分配给新变量

Slicing a DataFrame and assign it to new variables with a "for" loop

我有一个数据框 (2025x10)。我想 切片 数据帧并将其 分配 给一个 新的数据帧变量 ,每个变量都包含 25 行与索引连续。所以会有 81 个新的 DataFrame 变量(2025:25 = 81) 这是我在没有“for”循环的情况下手动编写的代码

newdata_1 =old_data.iloc[0:25,:]
newdata_2=old_data.iloc[25:50,:]
newdata_3 =old_data.iloc[50:75,:]
newdata_4=old_data.iloc[75:100,:]
#until newdata_81=old_data.iloc[2000:2025,:]

我可以用一个“for”循环而不是手动编写整个代码吗?

all_df = {}
for i, j in enumerate(range(0, 2025, 25)):
    all_df[f"newdata_{i+1}"] = df.iloc[j:j+25,:]

您想要的是使用 globals()locals()(或 vars())动态创建新变量。这不是一个很好的做法,但是当您控制变量名称时,它并不那么危险。

old_data = pd.DataFrame({'A': np.random.random(2025)})

for i, df in enumerate(np.array_split(old_data, len(old_data) / 25), 1):
    globals()[f'newdata_{i}'] = df

现在您可以使用新的变量名访问切片:

>>> newdata_45
             A
1100  0.443526
1101  0.564314
1102  0.548801
1103  0.561671
1104  0.668331
1105  0.046114
1106  0.090302
1107  0.830096
1108  0.991514
1109  0.285102
1110  0.093784
1111  0.535805
1112  0.154352
1113  0.678095
1114  0.284844
1115  0.137232
1116  0.219372
1117  0.816656
1118  0.519414
1119  0.673969
1120  0.674139
1121  0.239825
1122  0.257405
1123  0.565221
1124  0.561289