如何在不首先分配df的情况下从熊猫数据帧仅将前N行或从P到Q行写入到csv中的csv?由于内存问题,我无法对要导出的数据进行子集化。
我正在考虑一个逐行写入csv的函数。
谢谢
答案 0 :(得分:2)
例如。
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')