如何使用Python将一个CSV文件拆分成多个文件

3

我有一个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"

摩洛哥.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
将CSV文件按列数据拆分成多个文件:这将有助于。 - deadshot
加载到 pandas.DataFrame 中,然后您可以轻松选择行并仅保存所选行。 - furas
3个回答

4

尝试以下操作:

根据国家名称筛选列。然后使用 pandas 中的 to_csv 将其转换为 CSV 文件。

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)

4
如果您无法使用 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 column (country)
    lst = sorted(reader, key=lambda x : x[4])
    groups = groupby(lst, key=lambda x : x[4])

    #Write file for each country
    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"])  #header
            for line in g:
                csv_output.writerow(line)

它给了我很多相同国家的CSV文件。 - FlutterLover
我需要为每个国家一个CSV文件。 - FlutterLover
@FlutterLover 使用你的world.csv文件,我得到了三个文件:Morocco.csv、Kosovo.csv和France.csv。这不是你想要的吗?你得到了哪些文件? - jignatius
@FlutterLover 我刚刚注意到你的world.csv文件似乎缺少一列。标题中有五个列名,但实际数据中只有四列。也许这是一个复制粘贴错误?如果数据包含五列,请尝试在我的代码中将x [3]更改为x [4]。 - jignatius
是的,现在可以工作了,只需将x[3]更改为x[4]。非常感谢。 - FlutterLover
@FlutterLover 很棒! - jignatius

0

最简单的方法如下: #在您的工作目录中创建一个名为“adata”的文件夹 #导入glob模块

for i,g in df.groupby('CITY'):
    g.to_csv('adata\{}.csv'.format(i), header=True, index_label='Index')
print(glob.glob('adata\*.csv'))
filenames = sorted(glob.glob('adata\*.csv'))

for f in filenames:
    #your intended processes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接