[英]why I Can't drop NAN values with dropna() function in pandas
[英]Can't drop NAN with dropna in pandas
我將熊貓導入為 pd 並運行下面的代碼並得到以下結果
代碼:
traindataset = pd.read_csv('/Users/train.csv')
print traindataset.dtypes
print traindataset.shape
print traindataset.iloc[25,3]
traindataset.dropna(how='any')
print traindataset.iloc[25,3]
print traindataset.shape
輸出
TripType int64
VisitNumber int64
Weekday object
Upc float64
ScanCount int64
DepartmentDescription object
FinelineNumber float64
dtype: object
(647054, 7)
nan
nan
(647054, 7)
[Finished in 2.2s]
從結果來看,dropna 行不起作用,因為行號沒有改變並且數據幀中仍然存在 NAN。 這是怎么來的? 我現在很瘋狂。
您需要閱讀文檔(重點添加):
返回在給定軸上帶有標簽的對象被省略
dropna
返回一個新的DataFrame。 如果您希望它修改現有的 DataFrame,您所要做的就是在文檔中進一步閱讀:
就地:布爾值,默認為 False
如果為 True,就地執行操作並返回 None。
因此,要就地修改它,請執行traindataset.dropna(how='any', inplace=True)
。
pd.DataFrame.dropna
默認使用pd.DataFrame.dropna
inplace=False
。 這是大多數Pandas 操作的規范; 例外確實存在,例如update
。
因此,您必須要么分配回您的變量,要么明確聲明inplace=True
:
df = df.dropna(how='any') # assign back
df.dropna(how='any', inplace=True) # set inplace parameter
在風格上,前者通常是首選,因為它支持運算符鏈接,而后者通常不會產生任何或顯着的性能優勢。
或者,您也可以使用notnull()
方法來選擇非null
的行。
例如,如果您想從列country
和variety
數據框評論中選擇非null
值:
answer=reviews.loc[(reviews.country.notnull()) & (reviews.variety.notnull())]
但在這里我們只是選擇相關數據;要刪除null
值,您應該使用dropna()
方法。
這是我的第一篇文章。 我只花了幾個小時調試這個確切的問題,我想分享我如何解決這個問題。
我正在將整個數據幀轉換為字符串,然后使用與下面顯示的代碼類似的代碼將該值放回數據幀中:(請注意,下面的代碼只會將值轉換為字符串)
row_counter = 0
for ind, row in dataf.iterrows():
cell_value = str(row['column_header'])
dataf.loc[row_counter, 'column_header'] = cell_value
row_counter += 1
將整個數據幀轉換為字符串后,我使用了dropna()
函數。 以前為NaN
值(被熊貓視為空值)被轉換為字符串'nan'
。
總之,在開始處理 CSV 中的數據並轉換其數據類型之前,首先刪除空白值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.