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

这个问题已经在这里有了答案:            >            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
    原文作者:技术搬砖工
    原文地址: https://blog.csdn.net/hephec/article/details/115826274
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞