python教程,如何拆分dataframe一列数据为多列数据?
发布于 作者:苏南大叔 来源:程序如此灵动~
本文描述对dataframe
的一列数据进行有规则的拆分的方式方法,用到的函数方法就是.split()
。没想到在php
中已经消失的split()
,又在python
里面出现了。哈哈!
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验。测试环境:win10
,python@3.11.0
,numpy@1.24.2
,pandas@1.5.3
。
需求描述
本文要处理的dataframe
类型数据如下:
import pandas as pd
df = pd.DataFrame([['黑猫 老许', '3岁|15斤'],
['黄狗 虎子', '5岁|25斤'], ],
columns=['属主', '属性'])
可以看到,数据是有规律的,并且所有的数据都符合这个规律(否则代码报错)。第一列数据将根据空格进行拆分,第二列数据将根据字符|
进行拆分。
拆分的的方法有两个,为了方便演示,每一列使用了一种拆分方式。
方案一,df[字段].str.split()【推荐】
df[['种类', '姓名']] = df["属主"].str.split(' ', expand=True)
df.drop(axis=1, columns='属主', inplace=True)
print(df)
输出:
属性 种类 姓名
0 3岁|15斤 黑猫 老许
1 5岁|25斤 黄狗 虎子
方案二,df[字段].map(lambda r:r.split('|')[数字索引])
df['年龄'] = df['属性'].map(lambda r: r.split('|')[0])
df['体重'] = df['属性'].map(lambda r: r.split('|')[1])
df.drop(axis=1, columns='属性', inplace=True)
print(df)
输出:
种类 姓名 年龄 体重
0 黑猫 老许 3岁 15斤
1 黄狗 虎子 5岁 25斤
相关文章
结束语
个人觉得还是第一种方案比较好一些,map()
+lambda
有些长不方便。


