如何替換pandas.DataFrame中很少發生的某些列的值,即頻率較低(忽略NaN)?從pandas.dataframe替換低頻分類值,同時忽略NaN
例如,在下面的數據框中,假設我想要替換列A或B中在其各自列中發生少於三次的任何值。我想用「其他」來替換這些:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A':['ant','ant','cherry', pd.np.nan, 'ant'], 'B':['cat','peach', 'cat', 'cat', 'peach'], 'C':['dog','dog',pd.np.nan, 'emu', 'emu']})
df
A | B | C |
----------------------
ant | cat | dog |
ant | peach | dog |
cherry | cat | NaN |
NaN | cat | emu |
ant | peach | emu |
換句話說,在列A和B,我想,以取代那些發生兩次或以下的值(但獨自離開NaN的)。
所以我想輸出是:
A | B | C |
----------------------
ant | cat | dog |
ant | other | dog |
other | cat | NaN |
NaN | cat | emu |
ant | other | emu |
這與先前發佈的問題:Remove low frequency values from pandas.dataframe
但解決方案存在導致了「AttributeError的:‘NoneType’對象有沒有屬性' 。任何'」(?我想是因爲我有NaN值)
嗯,所以此工程在這個樣本DF,但是當我試圖用我的實際數據要做到這一點,我得到一個錯誤與更換W /字典修真線:ValueError:沒有足夠的值來解壓縮(預期2,得到0)。任何想法可能會發生在那裏? – Imu
我不確定,也許有必要轉換爲列表 - 'df [col] = df [col] .replace({x:'other'for x in y.tolist()})' – jezrael