gpt4 book ai didi

python - 检查 pandas 中是否至少有一列包含字符串

转载 作者:行者123 更新时间:2023-12-02 02:11:40 30 4
gpt4 key购买 nike

我想检查几列是否包含字符串,并用结果生成一个 bool 列。对于单个列来说,这很容易做到,但当将此方法应用于多个列时,会生成属性错误(AttributeError: 'DataFrame' object has no attribute 'str')。

示例:

import pandas as pd

c1=[x+'x' for x in 'abcabc']
c2=['Y'+x+'m' for x in 'CABABC']
cols=['A','B']

df=pd.DataFrame(list(zip(c1,c2)),columns=cols)
df

返回:

    A   B
0 ax YCm
1 bx YAm
2 cx YBm
3 ax YAm
4 bx YBm
5 cx YCm

以下代码在应用于单个列时有效,但在应用于多个列时不起作用。我想要一些适合这里并给出所需结果的东西:

df['C']=df[cols].str.contains('c',case=False)

因此所需的输出是:

    A   B   C
0 ax YCm True
1 bx YAm False
2 cx YBm True
3 ax YAm False
4 bx YBm False
5 cx YCm True

编辑:我更新了我的示例,以反射(reflect)实际搜索列是否“包含”某个值,而不是“等于”该值的愿望。

编辑:就时间而言,这是我希望能够匹配或击败的基准,而无需创建新列(对我的玩具示例中的列使用 *1000 ) :

newcols=['temp_'+x for x in cols]

for col in cols:
df['temp_'+col]=df[col].str.contains('c',case=False)

df['C']=df[newcols].any(axis=1)
df=df[['A','B','C']]

最佳答案

通过 applymap 的选项:

df['C'] = df.applymap(lambda x: 'c' in str(x).lower()).any(1)

通过堆栈/取消堆栈:

df['C'] = df.stack().str.contains('c', case=False).unstack().any(1)
df['C'] = df.stack().str.lower().str.contains('c').unstack().any(1)

输出:

    A    B      C
0 ax YCm True
1 bx YAm False
2 cx YBm True
3 ax YAm False
4 bx YBm False
5 cx YCm True

关于python - 检查 pandas 中是否至少有一列包含字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67675174/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com