如何处理拼接块之前的所有,但一列时,使用块读取大型csv文件

问题描述:

我有一个大的CSV文件(7GB),我用这些代码在大熊猫来阅读:如何处理拼接块之前的所有,但一列时,使用块读取大型csv文件

chunks=pd.read_table('input_filename', chunksize=500000) 
df=pd.DataFrame() 
df=pd.concat((chunk==1) for chunk in chunks) 

该作品对我而言,因为该文件是一种热门编码,所以chunk==1部分将0和1转换为布尔值,这为我节省了一些内存使用量。

现在我想用同样的方法来读取另一个文件,唯一的问题是新文件有一个ID列,它不是一个热点编码。我的问题是:如何保持ID列完好无损,并以相同的方式转换其余列?

我尝试了一些子集技术,包括:

df=pd.concat((chunk.loc[:, -1]==1) for chunk in chunks)

但他们没有工作至今。

谢谢!

试试这个:

chunks = pd.read_csv('input_filename', chunksize=500000, index_col='ID') 
df = pd.concat([chunk.astype(bool) for chunk in chunks]).reset_index() 
+0

我计上心来!但它会抛出一个错误:'如果不是唯一参数,则必须将生成器表达式加括号。然后我尝试了:'df = pd.concat((chunk.set_index('ID')。astype(bool))chunks块,ignore_index = True)',仍然是同样的错误...也许我在错误的地方? – user3768495

+0

@ user3768495,我已更新我的文章 - 请检查... – MaxU

+0

嗨@MaxU,我也是自己试过。同样的错误。这可能是由于不同版本的Python/Pandas?我的Python是2.7.13,我的熊猫是0.20.2。谢谢! – user3768495