【问题标题】:Python Export Data to CSV Based on Column Name in ChunkPython根据块中的列名将数据导出为CSV
【发布时间】:2019-06-11 22:51:59
【问题描述】:

我正在用 Python 处理一些大约 500 万行的数据。我需要根据列中的特定值将这些数据导出到 csv 文件中。我还想确保没有文件的行数超过 100 万行。如果一个文件的行数超过 100 万行,python 将创建另一个 csv 文件来存储其余数据。

我尝试使用以下代码根据“col”列中的列值导出文件,但我不确定如何将每个文件限制为 100 万行。

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' 时,我们有 200 万行,当 city = 'miami' 时,我们有 100 万行。

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' 并且每个文件有 100 万行时才包含数据。 'miami.csv' 包含 city = 'miami' 时的数据

【问题讨论】:

  • 提前致谢!

标签: python pandas export-to-csv


【解决方案1】:

这样的事情应该可以工作:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2021-08-16
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多