我有一个带有字符串列的 pandas 数据框。字符串的长度为 2 或 3 个字符,我必须过滤掉第三个字符为“W”的字符串。到目前为止我已经
df[df.col_name.str[2] == 'W']
只要 df.col_name 包含包含 2 个和 3 个字符的字符串,此方法就有效。但是,当 df.col_name 仅包含 2 个字符的字符串时,代码会崩溃并显示错误:
TypeError: invalid type comparison
有什么办法可以让这两种情况都适用吗?
最佳答案
您可以使用apply
函数,它将自定义函数作为参数。自定义函数可以包含任何任意逻辑,在您的情况下,它会检查第三个字符是否是“W”。
这应该可以完成工作:
import pandas as pd
df = pd.DataFrame({'A':['a','ab','abW']})
def custom_filter(str):
if len(str) >= 3 and str[2] == 'W':
return str[2]
else:
return ""
df['new'] = df['A'].apply(custom_filter)
print(df['new'])
不使用 custom_filter
函数的较短方法是:
df[df['A'].apply(lambda x: len(x)>=3 and x[2]=='W')]
关于python - Pandas 字符串按可变长度位置过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49691923/