只写从熊猫 df 到 csv 的前 N 行



如何在不先子集 df 的情况下从熊猫数据帧中仅将前 N 行或从 P 到 Q 行写入 csv?由于内存问题,我无法对要导出的数据进行子集化。

我正在考虑一个逐行写入csv的函数。

谢谢

  • 使用 head- 返回前 n 行。

前任。

import pandas as pd
import numpy as np
date = pd.date_range('20190101',periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=date, columns=list('ABCD'))
#wtire only top two rows into csv file
print(df.head(2).to_csv("test.csv"))

这对你有用吗?

df.iloc[:N, :].to_csv()

df.iloc[P:Q, :].to_csv()

我相信df.iloc通常会生成对原始数据帧的引用,而不是复制数据。

如果这仍然不起作用,您也可以尝试在to_csv调用中设置chunksize。可能是 pandas 能够在不使用更多内存的情况下创建子集,但随后它会完整复制写入每个块的行。如果块大小是整个帧,则最终会在该点复制整个帧并耗尽内存。

如果所有其他方法都失败了,您可以遍历df.iterrows()df.iloc[P:Q, :].iterrows()df.iloc[P:Q, :].itertuples()并使用csv模块(可能writer.writerows(df.iloc[P:Q, :].itertuples()(写入每一行。

也许您可以选择要在CSV文件上写入的行索引,如下所示:

df[df.index.isin([1, 2, ...])].to_csv('file.csv')

或者使用这个:

df.loc[n:n].to_csv('file.csv')

最新更新