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_capital和total_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')
该博客介绍了如何利用Pandas库处理CSV文件,特别是针对包含数字和单位的列进行拆分。通过使用`str.extract`进行正则匹配,将数字和单位分开存储到新的列中。接着,运用`apply`函数将字符串转换为浮点数,并定义`unit_charge`函数处理亿和万单位的转换。最后,使用`replace`函数替换缺失值为0,确保数据完整性。
619

被折叠的 条评论
为什么被折叠?



