如何在不先对df进行子集操作的情况下,从pandas dataframe中仅写入前N行或从P到Q行到csv?由于内存问题,我无法对要导出的数据进行子集操作。
我考虑编写一个逐行写入csv的函数。
谢谢
示例:
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能够创建子集而不使用太多内存,但然后它会完全复制写入每个块的行。如果chunksize为整个数据帧,则在该点上会复制整个数据帧并耗尽内存。df.iterrows()
或df.iloc[P:Q, :].iterrows()
或df.iloc[P:Q, :].itertuples()
,并使用csv
模块编写每行(可能是writer.writerows(df.iloc[P:Q, :].itertuples()
)。df2 = df.iloc[:N, :]
然后 df2.to_csv(..., chunksize=100)
。 - Matthias Fripp最初的回答
df[df.index.isin([1, 2, ...])].to_csv('file.csv')
df.loc[n:n].to_csv('file.csv')
.to_csv()
方法的chunksize
参数。 - asongtoruin.to_csv(index=False)
)。 - Sachin Raghavendran