看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas 处理数据我们无需要执行 for 循环可以轻松对列数据进行处理,应用 pandas 提供的高阶函数可以隐式地批量完成。在本例中,我们需要先对一列的数据进行处理,只需要应用一个方法即可。
以下为我们要处理判断的数据,A 列是一个字符串,它有类似列表的结构,但它不是列表数据类型。
import pandas as pd
from io import StringIO
data = '''
A B
['1'] 1
['1,2'] 2
['2'] 3
['1,3'] 2
'''
df = pd.read_csv(StringIO(data), sep=r'\s+')
df
# ...
需求期望增加一列 C,如果 B 在 A 列对应的类似列表的字符中时为 1,否则为 0。
我们可以先将 A 列转为列表,用 Python 内置函数 eval() 就可以实现。
然后再用 apply() 按行调用方法,判断 B 的值是否在转为列表的 A 中,它得到的是一个布尔值序列。
最后,将这个布尔值序列转为整型,就是转换为 0 和 1。
根据思路,我们的代码如下:
(
df.assign(A=df.A.str.replace("'",'').map(eval))
.assign(C=lambda d: d.apply(lambda s: s.B in s.A, axis=1))
.assign(C=lambda d: d.C.astype(int))
)
'''
A B C
0 [1] 1 1
1 [1, 2] 2 1
2 [2] 3 0
3 [1, 3] 2 0
'''
如果想看每行的过程结果,可以注释掉后边的代码执行查看。
这样我们就完成了需求。
(完)
更新时间:2024-08-18 16:00:31 标签:pandas python 字符 列表