Прочтите несколько CSV и объедините эти CSV в отдельные файлы в зависимости от года в имени файла python - PullRequest
0 голосов
/ 28 мая 2020

Предположим, у меня есть следующие наборы данных, которые я успешно прочитал в свой блокнот:

data1-format1-1991-1992.csv
data2-format1-1993-1994.csv
data3-format1-1995-1996.csv

data4-format2-1991-1992.csv
data5-format2-1993-1994.csv
data6-format2-1995-1996.csv

Я могу легко прочитать эти наборы из их собственных каталогов, например:

files1 = [filename for filename in os.listdir(master_dir_1) if filename.startswith("data-")] # would do same for second set of files, in master_dir_2

for filename in files1:
    df = pd.read_csv(filename)
    print(df)

Это распечатывает их в одном кадре, но мне нужно прочитать их, а затем pd.merge() каждый отдельный файл в зависимости от года в имени файла. Например, data1-format1-1991-1992.csv соединяется с data1-format2-1991-1992.csv и так далее.

Процесс будет заключаться в том, чтобы прочитать оба набора из их собственных каталогов с помощью l oop выше, а затем получить еще один l oop, который объединяет и сохраняет на основе совпадающих лет в именах файлов (I считать). Как мне разделить по годам и сохранить каждый присоединенный файл отдельно с годами в сохраненном имени csv? У меня есть процесс чтения отдельных наборов данных и присоединения / сохранения, но не для множественных операций чтения, присоединения и сохранения.

Этот вопрос помогает мне кое-что понять , из-за того, как используется .format().

Ответы [ 2 ]

1 голос
/ 28 мая 2020
years = [name.split('-')[-2:] for name in names]
years = ['-'.join(y) for y in years]
years = set(years) #unique years
print(years)

dataformat = [name.split('-')[:2] for name in names]
dataformat = ['-'.join(df) for df in dataformat]
print(dataformat)

year_data = dict()
for year in years:
    yragne=year.split('.')[0] 
    year_data[yragne] = pd.DataFrame([])
    for df in dataformat:
        try:
            gg = pd.read_csv(rootdir+'/'+df+'-'+year,header = None)
            print(gg)
            year_data[yragne] = year_data[yragne].append(pd.read_csv(rootdir+'/'+df+'-'+year,header = None),True)
        except:
            pass
1 голос
/ 28 мая 2020

Вы можете попробовать a для l oop с .groupby

for year, x in df.groupby(['Year']):
    x.to_csv(f'data1-format1-{year}.csv', index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...