006—pandas 将带有“万”和“亿”的数字转为整型

前言

在数据分析过程中,有时需要先对数据进行格式转换,比如本案例中数字带有万、亿等单位,它实质上是一个字符串,无法参与统计计算,因此我们先要将它们转换为数字类型。一起来看看 pandas是如何操作的。


思路

  • 可以写一个函数来处理,传入的是一个字符串,输出一个整型的数字,最后用一列的 map() 方法映射调用这个方法。
  • 字符串中将万、亿分别替换为科学计数法的 e4 和 e8,形成了数字的科学计算法字面量,如字符串 5.90e8,然后用 Python
    内置函数 eval() 来转换为 Python 对象,即数字类型。

使用步骤:

1.引入库

代码如下(示例):

from io import StringIO
import pandas as pd

2.读入数据

代码如下(示例):

data = '''
       代码     名称      金额
0  300057   万顺新材   5.90亿
1    2758   浙农股份   4.62亿
2  603007   ST花王   2241万
3    2707   众信旅游   4.00亿
4  603617   君禾股份   3206万
5    2873   新天药业   4.05亿
'''

df = pd.read_csv(StringIO(data), delim_whitespace=True)
df

006—pandas 将带有“万”和“亿”的数字转为整型_第1张图片

def func(money: str) -> int:
    foo = money.replace('万', 'e4').replace('亿', 'e8')
    foo = eval(foo)
    return int(foo)

# 调用这个函数并覆盖原列:

df.assign(金额=df.金额.map(func))

006—pandas 将带有“万”和“亿”的数字转为整型_第2张图片

# 也可以用链式方法一一处理:

(
    df.assign(金额=df.金额.str.replace('万', 'e4'))
    .assign(金额=lambda d: d.金额.str.replace('亿', 'e8'))
    .assign(金额=lambda d: d.金额.map(eval))
    .astype({'金额': int})
)

006—pandas 将带有“万”和“亿”的数字转为整型_第3张图片


总结

以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

你可能感兴趣的:(pandas,实战案例大全,pandas)