将DataFrame中的pandas系列从字符串(财务缩写)转换为数字

时间:2018-02-19 19:37:46

标签: python python-3.x pandas

我试图从NOAA解析Storm Data。经过一些清理和解析后,我留下了一个像这样的DataFrame:

au run --watch

为了记录,这个示例DataFrame只是一个简化。真正的DataFrame有大约。 25列和2200万行。我想将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) 中的值从字符串转换为数值。我期望的结果看起来与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"]

感谢您的帮助!!!

1 个答案:

答案 0 :(得分:4)

我是这种方法的粉丝

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