每次迭代时在带有标识列的熊猫上迭代创建数据框

时间:2019-02-27 16:30:50

标签: python pandas dask

我正在尝试构建一个大型数据框(main_df),最终将通过将来自多个数据框(df_subdir)的行附加到多个子目录(subdirs)中来创建,其中一个主目录(main_dir)下的一个级别。换句话说,我应该:

  1. 更改为(每个)subdirs
  2. df_subdir
  3. 获取数据
  4. df_subdir的行追加到main_df

这应该对subdirs中的所有main_dir完成

考虑到我当前的工作目录已经main_dir,并且所有df_subdirs .xlsx数据帧(列= column1column2column3)都位于subdirs位于main_dir的正下方,到目前为止,我编写的代码可以做到这一点,除了我想要一个额外的列(column4)来唯一标识数据(行)来自哪个subdirs

import os
import pandas as pd

# initialise my dataframe
main_df = pd.DataFrame(columns=['column1', 'column2', 'column3'])

# start the iteration    
for i in subdirs:
    os.chdir(f'{os.getcwd()}/{i}') # change to each of the subdirectories
    main_df = main_df.append(pd.read_excel('df_subdir.xlsx')) # append the data from df_subdir to main_df

现在考虑到我的subdirs的名称遵循uniq-identifier_pattern_pattern这样的模式,我可以用uniq-identifier提取os.getcwd().split('_')[0]。这些是我希望在每次迭代时附加到column4的值。

我尝试了以下方法:

# initialise my dataframe with the extra column4
main_df = pd.DataFrame(columns=['column1', 'column2', 'column3', 'column4'])

for i in subdirs:
    os.chdir(f'{os.getcwd()}/{i}') # change to each of the subdirectories
    main_df['column4'] = os.getcwd().split('_')[0] # specify uniq-identifiers in column4
    main_df = main_df.append(pd.read_excel('name_of_df_subdir.xlsx'))

完成此操作后,column4有一个值,即上一次uniq-identifier迭代的subdirs

1 个答案:

答案 0 :(得分:0)

IIUC,您可以使用黄昏

要读取所有文件,您只需运行

import dask.dataframe as dd

df = dd.read_csv("main_dir/*/*.csv")

路径main_dir/*/*.csv main_dir上是最高目录,斜线之间有*,我们正在考虑所有子目录,然后*.csv代表其中的所有csv。 / p>

对于最后一个问题,您应该使用自定义功能,如here所述。