连续合并多个CSV文件



我有1000个列名相同的csv文件。我想把它们分别合并。我使用以下代码,但它随机合并所有csv文件。

files = os.path.join(path_files, "*_a.csv")
files = glob.glob(files)
df = pd.concat(map(pd.read_csv, files), ignore_index=True)

例如,它先放1000a.csv,然后放1_a.csv等等。但我想分别合并,然后删除前100个。

像这样的数据帧或单个csv文件:

1_a.csv、2_a.csv和3_a.csv,…,1000_a.csv

你能告诉我怎么可能吗?

我希望这对你有用

import pandas as pd
df = pd.DataFrame()
for csv_file in sorted(list_filenames):
temp_df = pd.read_csv(scv_file)
df = pd.concat([df, temp_df]) 

您可以按_之前的整数对文件名进行排序,或者删除_a.csv或最后6个字符:

files = os.path.join(path_files, "*_a.csv")
files = sorted(glob.glob(files), key=lambda x: int(x.split('_')[0]))
#alternative1
#files = sorted(glob.glob(files), key=lambda x: int(x.replace('_a.csv','')))
#alternative2
#files = sorted(glob.glob(files), key=lambda x: int(x[:-6]))
df = pd.concat(map(pd.read_csv, files), ignore_index=True)

您应该重新订购glob.glob((结果,如下所示:

files_path = os.path.join(base_path, "*_a.csv")
files = sorted(glob.glob(files_path), key=lambda name: int(name[0:-6]))
df = pd.concat(map(pd.read_csv, files), ignore_index=True)

关于自然排序也有类似的问题:字符串自然排序有内置函数吗?

这是一个替代解决方案。

os.chdir(path_files)
all_filenames = [i for i in sorted(glob.glob('*.{}'.format('csv')))]
df = pd.concat([pd.read_csv(f) for f in all_filenames ]).reset_index()

最新更新