gpt4 book ai didi

python - 如何将应用函数链接到 Pandas 数据帧的子集

转载 作者:行者123 更新时间:2023-12-04 07:50:48 24 4
gpt4 key购买 nike

我有一个 Pandas 数据框,我想根据两个函数的应用进行子集化 is_long()is_short() .第一个必须返回 True,第二个必须返回 True 以使行成为子集。例如:

import pandas as pd

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

def is_long(x):
assert isinstance(x, str)
return True if len(x) > 2 else False


def is_short(x):
assert isinstance(x, str)
return True if len(x) < 4 else False
以下应返回 name 的行长度为 3:
df[df['name'].apply(is_long).apply(is_short)]
应该返回:
    name    age
0 foo 10
2 baz 14
但是第二次应用不会在数据帧上执行,因为它返回一个断言错误:
   11 
12 def is_short(x):
---> 13 assert isinstance(x, str)
14 return True if len(x) < 4 else False

AssertionError:
我的问题是 - 如何优雅地将两个应用函数链接在一起(无需编写两行单独的代码),以便它们作用于同一列并按顺序执行?
任何建议在这里将不胜感激。

最佳答案

如果你想通过 apply() 来做方法然后
代替:

df[df['name'].apply(is_long).apply(is_short)]
做/使用这个:
 df[df.loc[df['name'].apply(is_long),'name'].apply(is_short)]
df[df['name'].apply(lambda x: is_long(x) & is_short(x))]
上述方法的输出:
#output

name age
0 foo 10
2 baz 14
说明:
在您的代码中: df[df['name'].apply(is_long).apply(is_short)] df['name'].apply(is_long)给出 boolean seriesTrue并且您正在将该 bool 系列传递给 is_short()通过链接另一个函数 apply()方法,这就是为什么你得到 AssertionError因为你用过 assert您的 is_short() 中的关键字功能和您的条件 isinstance(x, str)不满意

关于python - 如何将应用函数链接到 Pandas 数据帧的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66991065/

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