如果我有数据框,例如
df = pd.DataFrame(
{
'one' : pd.Series(
[1., 2., 3., 4.],
index=['a', 'b', 'c', 'd']
),
'two' : pd.Series(
['5,6', '7,8', '1,10', '3,8,9'],
index=['a', 'b', 'c', 'd']
)
}
)
如何只选择第2列中不包含任何小于3的整数的行?我的意思是:
df[
all([int(x) > 3 for x in df['two'].str.split(',')])
]
但它会抛出
KeyError: True
对我说。有人可以帮帮我吗?
答案 0 :(得分:3)
x
是一个字符串列表,您需要添加一个内部循环来检查x
并检查值:
df[
[all(int(x) > 3 for x in s) for s in df['two'].str.split(',')]
]
# one two
#a 1.0 5,6
#b 2.0 7,8
或者,您可以使用apply
方法替换外部for循环:
df[
df.two.str.split(',').apply(lambda s: all(int(x) > 3 for x in s))
]
# one two
#a 1.0 5,6
#b 2.0 7,8