将具有类似名称约定的文件合并到数据帧



我有一个存储在等目录中的文件列表

filenames=[
abc_1.txt
abc_2.txt
abc_3.txt
bcd_1.txt
bcd_2.txt
bcd_3.txt
]
pattern=[abc]

我想将多个txt文件读取到一个数据帧中,这样所有以abc开头的文件都将在一个数据框中,然后所有以bcd等开头的文件名。

我的代码:

file_path = '/home/iolie/Downloads/test/'
filenames = os.listdir(file_path)

prefixes = list(set(i.split('_')[0] for i in filenames))
for prefix in prefixes:
print('Reading files with prefix:',prefix)
for file in filenames: 
if file.startswith(prefix):
print('Reading files:',file)
list_of_dfs = [pd.concat([pd.read_csv(os.path.join(file_path, file), header=None) ],ignore_index=True)]
final = pd.concat(list_of_dfs)

此代码不追加数据帧,而是覆盖数据帧。有人能帮忙吗?

比创建任意数量的未链接数据帧更好的想法是输出数据帧字典,其中键是前缀:

from collections import defaultdict
filenames = ['abc_1.txt', 'abc_2.txt', 'abc_3.txt',
'bcd_1.txt', 'bcd_2.txt', 'bcd_3.txt']
dd = defaultdict(list)
for fn in filenames:
dd[fn.split('_')[0]].append(fn)
dict_of_dfs = {}
for k, v in dd.items():
dict_of_dfs[k] = pd.concat([pd.read_csv(fn) for fn in v], ignore_index=True)

最新更新