如標題所述,在查看檔案后
我正在讀取一個 .xlsx 檔案,其中有一列“HOUR”有很多值,當一個實體的值為 99 時,我想轉換為 None
我嘗試了具有不同值的 na_values 引數:
na_values = ['99']
na_values = [r'99']
na_values = 99
...
然后像這樣閱讀excel:
accidents = pd.read_excel(filename, sheet_name= 'datos', na_values=[99])
但它似乎不起作用,當我這樣做時:
np.sum(accidents['HOUR'] == 99)
我得到一個大于 0 的值(這意味著值 = 99 的實體尚未轉換為 None/NaN)
我還讀過我應該包括選項
keep_default_na=False
但無濟于事。
“HOUR”列的值為:
accidents['HOUR'].unique()
array([ 8, 15, 9, 14, 11, 0, 13, 20, 3, 19, 17, 7, 22, 21, 16, 6, 23,
18, 10, 12, 1, 99, 4, 5, 2, 24], dtype=int64)
我已經將我的 pandas 版本更新到 1.5.1,但它仍然不起作用,有什么想法嗎?
.xls 檔案可在以下位置找到:http ://www.transtats.bts.gov/Fields.asp?Table_ID=1158
謝謝
uj5u.com熱心網友回復:
replace讀取 excel 檔案后,只需在資料框上應用方法:
df.replace(99, np.nan)
如果您只想替換特定列的值,例如 Hour:
df['HOUR'].replace(99, np.nan)
更新:
我想您想知道為什么read_excel()方法不能使用您提供的 na 值,如果您查看該方法的檔案:
na_values :標量、str、類似串列或 dict,默認 None識別為 NA/NaN 的附加字串。
它只接受na_values引數中的字串,因此您需要將其作為字串 '99' 傳遞才能在您的情況下作業。
由于某些原因,它不適用于integerexcel 作業表中的 na_values。根據 docsread_excel方法,可以推斷出列型別,但可以明確指定。也許它沒有HOUR正確設定 col 型別,所以na_values無法正常作業。我通過在方法中明確指定列資料型別找到了解決方法,并且效果很好:
accidents = pd.read_excel(filename, sheet_name= 'datos', dtype={'HOUR': str}, na_values=['99'])
accidents = pd.read_excel(filename, sheet_name= 'datos', dtype={'HOUR': str}, na_values=[99])
uj5u.com熱心網友回復:
好的,更新。
我仍然沒有弄清楚為什么 read_excel() 函式沒有按預期作業
如果有人遇到這個問題,我建議將 .xls/.xlsx 檔案轉換為 .csv 并像這樣更改讀取功能:
accidents = pd.read_excel(filename, sheet = 0, na_values = missing_values_dict, keep_default_na=False)
accidents = pd.read_csv(filename , sep = ';', na_values= missing_values_dict, keep_default_na=False)
與 missing_values_dict 類似:
missing_values_dict = {
'WEEKDAY': '9',
'HOUR': '99'
}
任何問題讓我知道!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/533431.html
下一篇:使用VBA根據周數插入行
