我在一个目录(1000+(中有大量CSV,其中包含不同的数据。一些CSV的列数比其他CSV多/少,我希望能够在列数相同的情况下合并每个CSV。幸运的是,在每个CSV文件名中都有一个字符串,它有助于表示哪个";组";它也属于。
考虑以下3个例子:
CSV1 named: **Report3443_GMA_45_20210516_111358.csv**
Contains:
| Date | ID | Amount |
| ---------- | ------ | ------- |
| 01/05/2021 | GMA_45 | 1565.43 |
| 02/05/2021 | GMA_45 | 58963.9 |
| 05/05/2021 | GMA_45 | 962.27 |
CSV2 named: **Report7853_ATH_16_20210516_095745.csv**
Contains:
| Date | ID | Amount | Subgroup |
| ---------- | ------ | ------- | -------- |
| 03/05/2021 | ATH_16 | 6345.01 | 861312 |
| 04/05/2021 | ATH_16 | 7824.69 | 861312 |
| 09/05/2021 | ATH_16 | 962.27 | 846131 |
CSV3 named: **Report45896_GMA_45_20210516_143825.csv**
Contains:
| Date | ID | Amount |
| ---------- | ------ | ------- |
| 11/05/2021 | GMA_45 | 9915.12 |
| 14/05/2021 | GMA_45 | 66452.05|
| 15/05/2021 | GMA_45 | 4893.85 |
正如你所看到的,CSV1&CSV3包含相同的文件名字符串(GMA_45(,并且它们具有相同的列数。我想要这些CSV的合并版本,以及文件名中字符串相同的任何其他迭代。
我使用了这篇文章中的代码,并进行了一些更改。代码运行良好,尽管输出CSV在每行之间写入一个空行,并且每次附加匹配的CSV时都会复制标题。如何删除空行并删除任何重复的标题(除了主标题(?我还想删除任何重复的行。
这是我的代码:
import glob
import os
import pandas
def create_merged_csv(key, filelist):
with open('Concat_{}.csv'.format(key), 'w+t') as outfile:
for filename in filelist:
df = pandas.read_csv(filename, header=None)
df.to_csv(outfile, index=False, header=None)
def find_filesets(path="."):
csv_files = {}
for name in glob.glob("{}/*_*.csv".format(path)):
key = '_'.join(name.split('_')[1:-2])
csv_files.setdefault(key, []).append(name)
for key,filelist in csv_files.items():
print(key, filelist)
create_merged_csv(key, filelist)
TEST_DIR_NAME="C:\Users\ME\Desktop\Python\MergeFiles\Input"
os.chdir("MergeFiles")
find_filesets(TEST_DIR_NAME)
我已经更新了代码,请检查
import glob
import os
import pandas
def create_merged_csv(key, filelist):
outfile = 'Concat_{}.csv'.format(key)
l = []
for filename in filelist:
df = pandas.read_csv(filename)
l.append(df)
pd.concat(l).to_csv(outfile, index=False)
def find_filesets(path="."):
csv_files = {}
for name in glob.glob("{}/*_*.csv".format(path)):
key = '_'.join(name.split('_')[1:-2])
csv_files.setdefault(key, []).append(name)
for key,filelist in csv_files.items():
print(key, filelist)
create_merged_csv(key, filelist)
TEST_DIR_NAME="C:\Users\ME\Desktop\Python\MergeFiles\Input"
os.chdir("MergeFiles")
find_filesets(TEST_DIR_NAME)
这可能有助于