这个问题已经在这里有了答案: > Converting characters to numerical values in a dataframe 2个
> How to convert numbers represented as characters for short into numeric in Python 3个
我正在尝试从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