1. 程式人生 > 其它 >python-將DataFrame中的 pandas 系列從字串(財務縮寫)轉換為數字

python-將DataFrame中的 pandas 系列從字串(財務縮寫)轉換為數字

技術標籤: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