我正在尝试构建一个大型数据框(main_df
),最终将通过将来自多个数据框(df_subdir
)的行附加到多个子目录(subdirs
)中来创建,其中一个主目录(main_dir
)下的一个级别。换句话说,我应该:
subdirs
df_subdir
df_subdir
的行追加到main_df
这应该对subdirs
中的所有main_dir
完成
考虑到我当前的工作目录已经main_dir
,并且所有df_subdirs
.xlsx数据帧(列= column1
,column2
和column3)
都位于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
。
答案 0 :(得分:0)
IIUC,您可以使用黄昏。
要读取所有文件,您只需运行
import dask.dataframe as dd
df = dd.read_csv("main_dir/*/*.csv")
路径main_dir/*/*.csv
main_dir
上是最高目录,斜线之间有*
,我们正在考虑所有子目录,然后*.csv
代表其中的所有csv。 / p>
对于最后一个问题,您应该使用自定义功能,如here所述。