看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本需求是一个文本处理方法的需求,有一列用中文逗号分隔的文本项目列表,需要将其去除重复的项目,利用 pandas 可以高效地帮助我们完成这些操作。
源数据:
# 数据
'''
花生,瓜子,花生,糖
苹果,西瓜,瓜子,苹果
腰果,菠萝,菠萝
橙子,橙子
香蕉,鸭梨,西瓜,花生
'''
# 复制以上数据然后执行载入 DataFrame
import pandas as pd
df = pd.read_clipboard(names=['x'])
df
'''
x
0 花生,瓜子,花生,糖
1 苹果,西瓜,瓜子,苹果
2 腰果,菠萝,菠萝
3 橙子,橙子
4 香蕉,鸭梨,西瓜,花生
'''
需要将每个行的项目去除重复值,并继续用中文逗号连接。
方法一。先将文本用中文逗号进行分隔得到列表,再转为集合实现去重,最后再拼接起来。代码如下:
(
df.assign(y=df.x.str.split(','))
.assign(z=lambda d: d.y.map(set))
.assign(t=lambda d: d.z.map(','.join))
)
'''
x y z t
0 花生,瓜子,花生,糖 [花生, 瓜子, 花生, 糖] {花生, 瓜子, 糖} 花生,瓜子,糖
1 苹果,西瓜,瓜子,苹果 [苹果, 西瓜, 瓜子, 苹果] {瓜子, 西瓜, 苹果} 瓜子,西瓜,苹果
2 腰果,菠萝,菠萝 [腰果, 菠萝, 菠萝] {腰果, 菠萝} 腰果,菠萝
3 橙子,橙子 [橙子, 橙子] {橙子} 橙子
4 香蕉,鸭梨,西瓜,花生 [香蕉, 鸭梨, 西瓜, 花生] {香蕉, 西瓜, 鸭梨, 花生} 香蕉,西瓜,鸭梨,花生
'''
以上 y、z、t 列展示了处理过程,注意的是,以上方法失去了文本中项目先后顺序,要保持顺序我们再结合以下为定义一个处理方法来进行调用来实现:
# 定义处理方法
def handle(cell: str):
ser = pd.Series(cell.split(','))
return ','.join(ser.unique())
# 应用函数
df.assign(y=df.x.map(handle))
'''
x y
0 花生,瓜子,花生,糖 花生,瓜子,糖
1 苹果,西瓜,瓜子,苹果 苹果,西瓜,瓜子
2 腰果,菠萝,菠萝 腰果,菠萝
3 橙子,橙子 橙子
4 香蕉,鸭梨,西瓜,花生 香蕉,鸭梨,西瓜,花生
'''
y 列就是我们要的结果。
(完)
更新时间:Aug. 18, 2024, 3:38 p.m. 标签:pandas 文本 重复值