从熊猫df到csv只写前N行

时间:2019-08-12 09:35:17

标签: python pandas csv

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

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

谢谢

3 个答案:

答案 0 :(得分:2)

  • 使用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"))

答案 1 :(得分:1)

这对您有用吗?

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

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

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

如果这仍然不起作用,您也可以尝试在chunksize调用中设置to_csv。可能熊猫可以在不使用更多内存的情况下创建子集,但是熊猫可以对写入每个块的行进行完整复制。如果chunksize是整个帧,那么您最终将在该点复制整个帧并耗尽内存。

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

答案 2 :(得分:0)

也许您可以这样选择要写入CSV文件的行索引:

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

或使用此一个:

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