我有一個包含320k行和450列的小型數據框。還有一些列表的列號:Python/Pandas:替換大型數據集的多列中的某些值
list1 = [1,3,5,...]
list2 = [4,9,...]
...
我的目標是從當前列表中的每一列替換某些值,然後將其保存:
df[df[list1] > 7] = np.nan
df[df[list2] >90] = np.nan
...
數據幀的大小讓我做它由大塊:
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關閉),機智h任何塊大小的值。但是當它完成時,它將大部分字符串中的所有值都替換爲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
那麼,有關它的任何想法?我們可以用「chunking」模式來實現嗎,還是有另一種方式(那麼我需要一個例子)?我只是想更換某些數值爲NaN ... :)
這可能是因爲您選擇數據的方式會返回副本。嘗試使用選擇http://pandas.pydata.org/pandas-docs/stable/indexing.html – canyon289