【发布时间】:2015-07-14 14:16:32
【问题描述】:
我有一个包含 320k 行和 450 列的小型数据框。有一些带有列号的列表:
list1 = [1,3,5,...]
list2 = [4,9,...]
...
我的目标是从当前列表中替换每列中的某些值,然后保存它:
df[df[list1] > 7] = np.nan
df[df[list2] >90] = np.nan
...
dataframe 的大小让我不得不分块做:
for chunk in pd.read_csv(filePrev,chunksize=10000,header=None):
>>> chunk[chunk[list1] >= 7] = np.nan
>>> chunk[chunk[list2] >= 90] = np.nan
...
>>> chunk.to_csv(newFile,mode='a',header=False,index=False)
但是有一个不正确的工作:我已经多次运行此代码,但它大多无法完成工作(IPython 中的内存错误或刚刚被 Windows 关闭的应用程序),具有任何 chunksize 值。但是当它完成时,它将大部分字符串中的所有值替换为 NaN,并且有一些字符串全部替换正确。
我已经在同一数据集的一小部分上尝试了相同的逻辑,它可以正常工作!
In [11]: df = pd.read_csv(filePrev,nrows=5,usecols=[1,2,3,4,5,6,7],header=None)
In [12]: df
Out[12]:
1 2 3 4 5 6 7
0 1 1 1 1 1 1 1
1 3 1 1 1 2 1 1
2 3 1 1 1 1 1 1
3 3 1 1 1 2 1 2
4 3 1 1 1 1 1 1
In [13]: list = [1,7]
In [14]: df[df[list] > 1] = np.nan
In [15]: df
Out[15]:
1 2 3 4 5 6 7
0 1 1 1 1 1 1 1
1 NaN 1 1 1 2 1 1
2 NaN 1 1 1 1 1 1
3 NaN 1 1 1 2 1 NaN
4 NaN 1 1 1 1 1 1
那么,有什么想法吗?我们可以在“分块”模式下实现它,还是有另一种方式(那我需要一个例子)?我只想将某些值替换为 NaN ... :)
【问题讨论】:
-
这可能是因为您选择数据的方式会返回一个副本。尝试使用选择pandas.pydata.org/pandas-docs/stable/indexing.html
标签: python pandas replace dataframe nan