簡體   English   中英

如何將缺少值的列轉換為整數類型

[英]How to convert a column with missing value to integer type

我想將一列轉換為整數,但問題是該列包含一個缺失值。 該列可以很好地轉換為浮點數,但不能轉換為整數。

示例代碼:

d2 = {'location': ['NY', 'NY', 'PA', 'NY', 'PA', 'PA', 'NY'], 'dep_name': ['hr', 'mk', 'fin', 'fin', 'hr', 'fin', 'fin'], 'Duration_of_Employment' : [10, 5, 9, 8, 2, 4, 7], 'Salary' : [50000, 86000,25000, 73000, 28000, 60000, 40000], 'Days_Since_Last_Promotion': ['61', '35', '25', '98', 'NaN', '45', '22']}
df2 = pd.DataFrame(data = d2)

df2['xy']  = df2['Days_Since_Last_Promotion'].astype(float)
df2['Months_Since_Last_Promotion'] = df2['xy'] // 30

現在 'Months_Since_Last_Promotion' 是浮點型。 但是當我嘗試將其轉換為整數時,出現以下錯誤。

df2['Months_Since_Last_Promotion'] = df2['Months_Since_Last_Promotion'].astype(int)

ValueError:無法將 NA 轉換為整數

從錯誤中,我認為這是由於缺少值 Nan 並嘗試了這項工作。但它沒有用,“Months_Since_Last_Promotion”仍然顯示為 float64。

df2.loc[df2['Months_Since_Last_Promotion'].notnull(), 'Months_Since_Last_Promotion'] = df2.loc[df2['Months_Since_Last_Promotion'].notnull(), 'Months_Since_Last_Promotion'].astype(int)

注意:我不能使用 fillna 來替換 NaN。 目標是將列保持為整數。

包含NaN值的數字列默認存儲為浮點數(即使所有其他數字都是整數) - 這是因為 Pandas 中的類型轉換限制。 這意味着,如果您想按原樣保留NaN而不填充缺失值,則可能無法將列轉換為整數(據我所知)。 以下是文檔的摘錄:

“雖然 Pandas 支持存儲整數和布爾類型的數組,但這些類型不能存儲丟失的數據。直到我們可以在 NumPy 中切換到使用原生 NA 類型之前,我們已經建立了一些“轉換規則”。當重新索引操作引入時缺少數據,該系列將根據下表中介紹的規則進行鑄造。”

請參閱:

https://pandas.pydata.org/pandas-docs/stable/missing_data.html#missing-data-casting-rules-and-indexing

其實有一個辦法:
https://pandas.pydata.org/pandas-docs/stable/user_guide/integer_na.html

在你的情況下:

df2['Months_Since_Last_Promotion'] = pd.array(df2['Months_Since_Last_Promotion'], dtype=pd.Int64Dtype())

但是,需要注意的是,其他軟件可能無法將此列識別為int列。 我認為這與NaN在 python 中的float有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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