簡體   English   中英

不能在 Pandas 中使用 dropna 刪除 NAN

[英]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的行。

例如,如果您想從列countryvariety數據框評論中選擇非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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM