我正在用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'包含数据
答案 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)