【发布时间】:2021-09-24 10:41:41
【问题描述】:
我在一个目录 (1000+) 中有大量包含不同数据的 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 的合并版本,以及文件名中的字符串相同的任何其他迭代。
我使用post 中的代码让我开始进行一些更改。代码工作正常,尽管输出 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)
【问题讨论】:
标签: python pandas csv merge data-cleaning