![](/img/trans.png)
[英]How to convert a column of type integer to type datetime in python?
[英]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/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.