【pandas小技巧】拆分某列中数字和单位

该博客介绍了如何利用Pandas库处理CSV文件,特别是针对包含数字和单位的列进行拆分。通过使用`str.extract`进行正则匹配,将数字和单位分开存储到新的列中。接着,运用`apply`函数将字符串转换为浮点数,并定义`unit_charge`函数处理亿和万单位的转换。最后,使用`replace`函数替换缺失值为0,确保数据完整性。
摘要由CSDN通过智能技术生成

pandas拆分某列中数字和单位

最近有csv文件需要处理,需要拆分里面的数字和单位做下数据的整理

以下是数据格式
在这里插入图片描述
想把单位拆分出来,单位有的是亿和万,需要对数据进行下处理

这是可以使用extract做下正则处理,拆分出来数字和单位

extract(正则拆分字符串)

extract文档地址:https://pandas.pydata.org/docs/reference/api/pandas.Series.str.extract.html?highlight=extract#pandas.Series.str.extract

Series.str.extract(pat, flags=0, expand=True)
总共三个参数,
path:传正则表达式
flags: 模块中的标志re,具体要看re的规则了
expand:如果为 True,则返回每个捕获组一列的 DataFrame。如果为 False,如果有一个捕获组,则返回 Series/Index;如果有多个捕获组,则返回 DataFrame

示例

    equity_data[['total_share_capital', 'total_share_capital_unit']] = equity_data['total_share_capital'].str. \
        extract('(?P<total_share_capital>\\d+\\.?\\d+)(?P<total_share_capital_unit>[\\u4e00-\\u9fa5]+)', expand=True)

这样数据列total_share_capital中就拆分为total_share_capitaltotal_share_capital_unit两列了

P<name>这个是正则分组命名用到的

apply(数据类型转换)

因为csv读入的数据都是字符串,所以需要数据类型转换

官方地址:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.apply.html?highlight=apply#pandas.DataFrame.apply
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
func: 传入处理数据的函数
axis:处理数据的方向,0为列处理, 1为行处理
raw: False返回 Series, True返回ndarray 对象(性能可能会更好)
result_type: {‘expand’, ‘reduce’, ‘broadcast’, None}, default None (没用过,不知道到底啥情况)
axis=1这些仅在(列)时起作用:

expand : 类似列表的结果将变成列。

reduce :如果可能,返回一个系列,而不是扩展类似列表的结果。这与“扩展”相反。

broadcast : 结果将被广播到DataFrame的原始形状,原始索引和列将被保留。

默认行为(无)取决于应用函数的返回值:类似列表的结果将作为这些结果的系列返回。但是,如果应用函数返回一个系列,这些将扩展为列。
apply可以快速对某一列进行类型转换

equity_data['total_share_capital'] = equity_data['total_share_capital'].apply(lambda x: float(x))

这样就可以字符串转float

map(单位换算)

单位有的是亿和万,需要对数据进行下处理

万和亿转成亿,需要除以10000

首先定义个函数

def unit_charge(x, y):
    if y == '万':
        return x / 10000.0
    else:
        return x


# 进行换算
equity_data['a_total_share_capital'] = list(map(lambda x, y: unit_charge(x, y),
                                                    equity_data['a_total_share_capital'],
                                                    equity_data['a_total_share_capital_unit']))

replace(替换无意义字符)

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.replace.html?highlight=replace#pandas.DataFrame.replace

DataFrame.replace(to_replace=None, value=NoDefault.no_default, inplace=False, limit=None, regex=False, method=NoDefault.no_default)
这个就不解释参数意义了

 equity_data = equity_data.replace(to_replace=np.nan, value='0')
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值