Как разбить один CSV на несколько файлов в python - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть CSV-файл (world.csv) выглядит следующим образом:

"city","city_alt","lat","lng","country"
"Mjekić","42.6781","20.9728","Kosovo"
"Mjekiff","42.6781","20.9728","Kosovo"
"paris","42.6781","10.9728","France"
"Bordeau","16.6781","52.9728","France"
"Menes","02.6781","50.9728","Morocco"
"Fess","6.6781","3.9728","Morocco"
"Tanger","8.6781","5.9728","Morocco"

И я хочу разделить его на несколько файлов по странам, как это:

Kosovo.csv:

"city","city_alt","lat","lng","country"
"Mjekić","42.6781","20.9728","Kosovo"
"Mjekiff","42.6781","20.9728","Kosovo"

France.csv:

"city","city_alt","lat","lng","country"
"paris","42.6781","10.9728","France"
"Bordeau","16.6781","52.9728","France"

Morroco.csv:

"city","city_alt","lat","lng","country"
"Menes","02.6781","50.9728","Morocco"
"Fess","6.6781","3.9728","Morocco"
"Tanger","8.6781","5.9728","Morocco"

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

попробуйте это:

отфильтруйте столбцы по названию страны. Затем преобразовать это в CSV-файл, используя to_csv в pandas

df = pd.read_csv('test.csv')

france = df[df['country']=='France']
kosovo = df[df['country']=='Kosovo']
morocco = df[df['country']=='Morocco']

france.to_csv('france.csv', index=False)
kosovo.to_csv('kosovo.csv', index=False)
morocco.to_csv('morocco.csv', index=False)
1 голос
/ 27 февраля 2020

Если вы не можете использовать pandas, вы можете использовать встроенный модуль csv и функцию itertools.groupby(). Вы можете использовать это для группировки по стране.

from itertools import groupby
import csv

with open('world.csv') as csv_file:
    reader = csv.reader(csv_file)
    next(reader) #skip header

    #Group by country
    lst = sorted(reader, key=lambda x : x[4])
    groups = groupby(lst, key=lambda x : x[4])

    for k,g in groups:
        filename = k + '.csv'
        with open(filename, 'w', newline='') as fout:
            csv_output  = csv.writer(fout)
            csv_output.writerow(["city","city_alt","lat","lng","country"])
            for line in g:
                csv_output.writerow(line)
...