Вот ссылка из предыдущего поста. . Я цитирую ответ PR ниже.
import pandas as pd
import glob
interesting_files = glob.glob("*.csv")
df_list = []
for filename in sorted(interesting_files):
df_list.append(pd.read_csv(filename))
full_df = pd.concat(df_list)
full_df.to_csv('output.csv')
Мне интересно, как изменить вышеизложенное, используя pandas. В частности, я пытаюсь рекурсивно перемещаться по каталогу и объединять все заголовки CSV и их соответствующие значения строк, а затем записывать их в один файл. Использование подхода P.R приводит к тому, что все заголовки и соответствующие им значения накладываются друг на друга. Мои ограничения:
Запись заголовков и соответствующих им значений (без "укладки") - по существу конкатенация один за другим
Если заголовки столбцов в одном файле совпадают с другими файлами, то они не должны повторяться. Добавлять следует только значения, поскольку они записываются в один CSV-файл.
Поскольку каждый файл имеет разные заголовки столбцов и разное количество заголовков столбцов, все они должны быть добавлены. Ничего не должно быть удалено.
Я также пробовал следующее:
import pandas as pd
import csv
import glob
import os
path = '.'
files_in_dir = [f for f in os.listdir(path) if f.endswith('csv')]
for filenames in files_in_dir:
df = pd.read_csv(filenames)
df.to_csv('out.csv', mode='a')
Вот два примера CSV:
ID,Type,ACH,SH,LL,SS,LS,ISO,MID,Pass,TID,CID,TErrors
12821767,Query,,,,,,,,,,,
и
Type,ID,CC,CCD,Message,MemberIdentifier,NPass,UHB,UAP,NewAudioPIN,AType,ASuufix,Member,Share,Note,Flag,Card,MA,Preference,ETF,AutoT,RType,Locator,ISO,MID,Pass,TID,CID,Errors
UMember,12822909,True,10/31/2013 5:22:19 AM,,,,False,False,,,,,,,,,,,,,Member,,,,,,,
Основываясь на приведенном выше примере, вывод должен быть примерно таким:
ID,Type,ACH,SH,LL,SS,LS,ISO,MID,Pass,TID,CID,TErrors,CC,CCD,Message,MemberIdentifier,NPass,UHB,UAP,NewAudioPIN,AType,ASuufix,Member,Share,Note,Flag,Card,MA,Preference,ETF,AutoT,RType,Locator,Errors
12822909,UMember,,,,,,,,,,,,True,10/31/2013 5:22:19 AM,,,,False,False,,,,,,,,,,,,,Member,,
12821767,Query ,,,,,,,,,,,,,,,,,,,,,,,,, etc.
(все столбцы заголовков во втором примере должны быть заполнены разделителем ',' для второй строки, где нет соответствующего заголовка в первом примере)
Как видно, во втором примере больше заголовков столбцов. Более того, некоторые из заголовков одинаковы (но в другом порядке). Я пытаюсь объединить все это вместе с их значениями, следуя вышеуказанным требованиям. Мне интересно, лучший ли метод — объединить или выполнить настраиваемую функцию встроенного метода панд?