Python Экспорт данных в CSV на основе имени столбца в чанке - PullRequest
0 голосов
/ 12 июня 2019

Я обрабатываю некоторые данные в Python с ~ 5 миллионами строк. Мне нужно экспортировать эти данные в CSV-файлы на основе конкретного значения в столбце. Я также хочу убедиться, что ни один файл не содержит более 1 миллиона строк. Если файл содержит более 1 миллиона строк, Python создаст другой файл CSV для хранения остальных данных.

Я пробовал следующий код для экспорта файлов на основе значения столбца в столбце 'col', но я не уверен, как ограничить каждый файл 1 миллионами строк.

for u in df['col'].unique():
    file_name = 'output/{0}.csv'.format(u) 
    df[df['col'] == u].to_csv(file_name,  encoding = 'utf-8', index = 
    False)

Пример. Предположим, у меня есть следующие данные, когда city = 'new_york', у нас 2 миллиона строк, когда city = 'miami', у нас 1 миллион строк.

city = ['new_york', 'new_york','new_york','miami','miami']
population = ['8.5','3.9','0.25','0.45','1.4','0.87']
df = pd.DataFrame({'city':city,'population':population})

В этом случае мне нужно всего три csv-файла: new_york0.csv, new_york1.csv и 'miami.csv'. 'new_york0.csv' и 'new_york1.csv' должны содержать данные только тогда, когда city = 'new_york' и каждый файл содержит 1 миллион строк. 'miami.csv' содержит данные, когда city = 'miami'

1 Ответ

2 голосов
/ 12 июня 2019

Как-то так должно работать:

maxrow = 1000000
for i in range(0, len(df), maxrow):
    df.iloc[i:i+maxrow].to_csv(f"test{i//maxrow}.csv") #using formatted string literals.

Это работает на полном кадре данных df, но его легко расширить до выбора.Просто сохраните копию выбранного фрейма данных, а затем используйте указанный выше код для выбора.

maxrow = 1000000
for u in df['col'].unique():
    seldf = df.loc[df['col'] == u]
    for i in range(0, len(seldf), maxrow):
        seldf.iloc[i:i+maxrow].to_csv("{}{:d}.csv".format(u, i//maxrow)), encoding='utf-8', index=False)
...