【问题标题】:iterate over a dataframe with save and restore each line通过保存和恢复每一行来遍历数据帧
【发布时间】:2022-01-23 20:40:03
【问题描述】:

我有一个这样的数据框

df1 = pd.DataFrame(
       {   
            "index":    ["December",  "December",  "November", "November"],
            "index1":   ["285",       "296",       "397",      "300"]})


     index     index1
0   December    285
1   December    296
2   November    397
3   November    300 

到目前为止,为了我的程序,我每次都保存一行,然后我再次加载/读取它并将其输入到我的程序中

例如 df1.head(1).to_csv("rules_fp2.csv") 之后是df1 = pd.read_csv('rules_fp2.csv')

以下几行以此类推

但是,我想让这个过程更加自动化。

所以我试图遍历我的数据帧并每次从数据帧中读取一行,然后像以前一样保存、加载和馈送

有什么想法吗?

【问题讨论】:

  • head(n) return n number of rows ,它不像返回第n行。逐行迭代似乎不是一个好主意(几乎总是)。告诉我们您要解决的最初问题是什么
  • 为什么要保存/恢复每一行?
  • 这似乎是XY Problem。请提供您的问题的更全面的背景和您的需求的预期结果。

标签: python pandas dataframe


【解决方案1】:
import pandas as pd
import glob

for idx, row in df.iterrows():
    df.iloc[[idx]].to_csv(f'{dir_path}/row_num_{idx}.csv', index=False)

# read files
flist = glob.glob(f'{dir_path}/row_num_*.csv')
for fn in flist:
    df = pd.read_csv(fn)
    # do something with this df ...

【讨论】:

    【解决方案2】:

    如果要遍历df1 的每一行并将每一行保存到一个新的 csv 文件中,可以使用以下循环:

    lst = []
    for i, idx in enumerate(range(df1.shape[0])):
        # save `idx`th row to file
        df1.loc[[idx]].to_csv('rules_fp2_{}.csv'.format(i))
        # read the saved file to `df0`
        df0 = pd.read_csv('rules_fp2_{}.csv'.format(i), index_col='Unnamed: 0')
        lst.append(df0)
        
    df = pd.concat(lst)
    

    输出:

          index  index1
    0  December     285
    1  December     296
    2  November     397
    3  November     300
    

    【讨论】:

      【解决方案3】:

      循环的另一种选择是应用一个函数进行并行处理。这将适用于应用相对简单/廉价功能的中型数据帧(对于更高级的情况,需要some optimization):

      import pandas as pd
      
      df1 = pd.DataFrame(
          {
              "index": ["December", "December", "November", "November"],
              "index1": ["285", "296", "397", "300"],
          }
      )
      
      
      def myfunc(row):
          print(row)
          # can add custom transform, save, read here
          return row
      
      
      df1.apply(myfunc, axis=1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-23
        • 1970-01-01
        • 2022-08-17
        • 1970-01-01
        相关资源
        最近更新 更多