python-將DataFrame中的 pandas 系列從字串(財務縮寫)轉換為數字
阿新 • • 發佈:2021-01-11
技術標籤:Python
我正在嘗試從NOAA解析風暴資料.經過一些清理和解析後,我剩下一個DataFrame,就像這樣:
import pandas as pd data = { 'ID' : [1, 2, 3, 4, 5, 6], 'EVENT_TYPE': ['Flood', 'Hail', 'Fire', 'Tornado', 'Flood', 'Fire'], 'Property_Damage': ['2.5K', 0, '.4M', "1.00K", NaN, "1K"]} df = pd.DataFrame(data)
為了便於記錄,此示例DataFrame只是一種簡化.真正的DataFrame具有大約. 25列2200萬行.我想將df [‘Property_Damage’]中的值從字串轉換為數字值.我想要的結果看起來類似於[2500,0,400000,1000,0,1000].
我瞭解我在假設可以將NaN值替換為0.我試圖使用
damage_property_split = df['Propery_Damage'].str.split([-1], expand=True)
但這不適用於0或NaN的記錄.
轉換的最佳方法是什麼
[‘2.5K’,0,’.4M’,“ 1.00K”,NaN,“ 1K”]至[2500,0,400000,1000,0,1000]?
感謝您的任何幫助!!!
最佳答案
我是這種方法的粉絲
mapping = dict(K='E3', M='E6', B='E9') df.assign(Property_Damage=pd.to_numeric( df.Property_Damage.replace(mapping, regex=True))) EVENT_TYPE ID Property_Damage 0 Flood 1 2500.0 1 Hail 2 0.0 2 Fire 3 400000.0 3 Tornado 4 1000.0 4 Flood 5 NaN 5 Fire 6 1000.0
您可以讓您的NaN充滿0
mapping = dict(K='E3', M='E6', B='E9')
df.assign(Property_Damage=pd.to_numeric(
df.Property_Damage.fillna(0).replace(mapping, regex=True)))
EVENT_TYPE ID Property_Damage
0 Flood 1 2500.0
1 Hail 2 0.0
2 Fire 3 400000.0
3 Tornado 4 1000.0
4 Flood 5 0.0
5 Fire 6 1000.0