pandas数据处理,字符串先拆分再合并
Posted 詩和遠方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas数据处理,字符串先拆分再合并相关的知识,希望对你有一定的参考价值。
概述
实现之前文章中用SQL实现的功能:
得益于python简洁的表达式,以及pandas库的强大功能,实现起来非常轻松,关键代码仅三行:
代码
读取数据,预处理
import pandas as pd
# load data
df_org = pd.read_csv(r'D:\\check_data.csv',sep='|',usecols=['结果'], encoding= 'utf-8')
df = df_org.copy()
# add index to column
df = df.reset_index()
# rename and drop none value
df.rename(columns='index':'id','结果':'result',inplace=True)
df.dropna(inplace=True)
原始样本数据
# org data where id in (2,3,32)
df[df['id'].isin([2,3,32])]
id | result | |
---|---|---|
2 | 2 | /*乙型肝炎病毒核酸定量\\8.05E+6\\ |
3 | 3 | /*甲胎蛋白(化学发光微粒子免疫检测法)\\1.4\\ |
32 | 32 | /乙肝e抗原(化学发光微粒子免疫检测法)\\88.15\\乙肝e抗体(化学发光微粒子免疫检测法)... |
关键代码
# strip and split to list
df['result'] = df['result'].str.strip('/\\\\').str.split('\\\\')
# to key:value format
df['result'] = df['result'].apply(lambda x:[f'k:v' for k, v in zip(x[0::2],x[1::2])])
# list value to rows
df = df.explode('result').reset_index(drop=True)
结果样本数据
# see result where id in (2,3,32)
df[df['id'].isin([2,3,32])]
id | result | |
---|---|---|
51 | 2 | *乙型肝炎病毒核酸定量:8.05E+6 |
52 | 3 | *甲胎蛋白(化学发光微粒子免疫检测法):1.4 |
279 | 32 | 乙肝e抗原(化学发光微粒子免疫检测法):88.15 |
280 | 32 | 乙肝e抗体(化学发光微粒子免疫检测法):11.42 |
说明
- 第一步,将字符拆分拆分为列表,用series.str.split实现
- 第二步,每两个值进行合并,用zip函数结合列表推导式批量实现
- 第三步,将不固定长度的 list 形式的列数据,转为行,用pandas的explode函数实现
以上是关于pandas数据处理,字符串先拆分再合并的主要内容,如果未能解决你的问题,请参考以下文章