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])]
idresult
22/*乙型肝炎病毒核酸定量\\8.05E+6\\
33/*甲胎蛋白(化学发光微粒子免疫检测法)\\1.4\\
3232/乙肝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])]
idresult
512*乙型肝炎病毒核酸定量:8.05E+6
523*甲胎蛋白(化学发光微粒子免疫检测法):1.4
27932乙肝e抗原(化学发光微粒子免疫检测法):88.15
28032乙肝e抗体(化学发光微粒子免疫检测法):11.42

说明

  • 第一步,将字符拆分拆分为列表,用series.str.split实现
  • 第二步,每两个值进行合并,用zip函数结合列表推导式批量实现
  • 第三步,将不固定长度的 list 形式的列数据,转为行,用pandas的explode函数实现

以上是关于pandas数据处理,字符串先拆分再合并的主要内容,如果未能解决你的问题,请参考以下文章

SQL数据处理,字符串先拆分后合并

pandas_数据拆分与合并

pandas_数据拆分与合并

pandas GroupBy上的方法apply:一般性的“拆分-应用-合并”

23、pandas的多列拼接成一列函数.str.cat()

Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)