python - Pandas 字符串按可变长度位置过滤

标签 python string pandas dataframe

我有一个带有字符串列的 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/

相关文章:

Python 和 PyQt : Catch Minimize Event

python - 打印具有特定值的网格

c++ - 比较 list<string> 和 vector<string> 中的字符串元素

python - 加载 txt 文件时跳过行

python - 对 CSV 文件中的每四个元素求平均值

python - 如何理解位数组中哪些位设置为 1

python - 仅选择在特定时间发生的行

python pandas 计算数据框中日期范围的小时数

c# - 获取特定值作为字符串 c#

javascript - 字符串编码问题