【问题标题】:Slicing a DataFrame and assign it to new variables with a "for" loop切片 DataFrame 并使用“for”循环将其分配给新变量
【发布时间】:2022-01-28 12:36:17
【问题描述】:

我有一个数据框 (2025x10) 。我想切片数据框并将其分配到一个新的DataFrame变量,每个变量包含连续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”循环来代替手动编写整个代码吗?

【问题讨论】:

    标签: python pandas dataframe for-loop slice


    【解决方案1】:

    您想要的是使用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
    

    【讨论】:

      【解决方案2】:
      all_df = {}
      for i, j in enumerate(range(0, 2025, 25)):
          all_df[f"newdata_{i+1}"] = df.iloc[j:j+25,:]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-24
        • 2019-09-14
        • 1970-01-01
        • 2012-04-26
        • 2021-02-23
        • 1970-01-01
        • 1970-01-01
        • 2020-07-27
        相关资源
        最近更新 更多