Python根据块中的列名将数据导出到CSV

时间:2019-06-11 22:51:59

标签: python pandas export-to-csv

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

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

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'。仅当city ='new_york'并且每个文件具有100万行时,“ new_york0.csv”和“ new_york1.csv”应包含数据。当city ='miami'时,'miami.csv'包含数据

1 个答案:

答案 0 :(得分:2)

类似的事情应该起作用:

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)