使用应用于列/系列的函数对 pandas 数据框进行子集化

isk*_*lue 3 python lambda subset dataframe pandas

我有一个 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
Run Code Online (Sandbox Code Playgroud)

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

def is_valid(x):
    assert isinstance(x, str)
    return True if len(x) == 3 else False
Run Code Online (Sandbox Code Playgroud)

我的目标是df对该函数返回 True 的位置进行子集化,这将返回输出

    name    age
0   foo     10
2   baz     14
Run Code Online (Sandbox Code Playgroud)

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

df[is_valid(df['name'])]
Run Code Online (Sandbox Code Playgroud)

Qua*_*ang 5

尝试:

df[df['name'].str.len()==3]
Run Code Online (Sandbox Code Playgroud)

或者使用您的代码apply

df[df['name'].apply(is_valid)]
Run Code Online (Sandbox Code Playgroud)