使用应用于 column/series 的函数子集 pandas 数据框

Subset pandas dataframe using function applied to a column/series

我有一个 pandas 数据帧 df,我想根据 运行 Name 的结果通过某个函数 is_valid()

import pandas as pd

data = [['foo', 10], ['baar', 15], ['baz', 14]]
df = pd.DataFrame(data, columns = ['name', 'age'])
df

    name    age
0   foo     10
1   baar    15
2   baz     14

该函数检查输入字符串的长度是否为 3 并且 returns 为 True 或 False:

def is_valid(x):
    assert isinstance(x, str)
    return True if len(x) == 3 else False

我的目标是子集 df,其中此函数 return 为 True,这将 return

的输出
    name    age
0   foo     10
2   baz     14

以下语法return是一个错误;如果输出满足条件(在本例中 = True),将函数应用于列(系列)的值并子集数据帧的正确语法是什么?

df[is_valid(df['name'])]

尝试:

df[df['name'].str.len()==3]

或者将您的代码与 apply 一起使用:

df[df['name'].apply(is_valid)]

掩码使用Series.str.len with Series.eq

df = df[df['name'].str.len().eq(3)]

或使用Series.apply传递自定义函数:

df = df[df['name'].apply(is_valid)]
print (df)
  name  age
0  foo   10
2  baz   14