gpt4 book ai didi

python - 具有混合数据类型的 Pandas 条件逻辑

转载 作者:行者123 更新时间:2023-11-28 21:39:27 27 4
gpt4 key购买 nike

我有一个 Pandas 数据框如下:

foo bar
a b
1 10
2 25
3 9

我想添加一个新列如下:

foo bar baz
a b 0
1 10 1
2 25 1
3 9 1

这是:如果 row['foo'] 或 row['bar] 是数字,则 row['baz'] = 1 else 0

我目前拥有的是:

def some_function(row):
if row['foo']>=0 or row['bar']>=0:
return 1
return 0

df['baz'] = df.apply(lambda row: some_function(row), axis=1

但这不起作用,因为 dtype 不是 int。我不能删除 non-int 行,因为我需要在数据框中使用它们。

知道如何解决这个问题吗?

最佳答案

如果要检查保存为字符串的数字,请使用 to_numeric , 然后与 ge (>=) 比较并使用 all检查每行的所有值是否为 True:

df['baz'] = df.apply(pd.to_numeric, errors='coerce').ge(0).all(1).astype(int)
print (df)
foo bar baz
0 a b 0
1 1 10 1
2 2 25 1
3 3 9 1

或者如果需要单独检查列:

df['baz'] = (pd.to_numeric(df['foo'], errors='coerce').ge(0) | 
pd.to_numeric(df['bar'], errors='coerce').ge(0)).astype(int)

谢谢,零检查数字的解决方案:

df['baz'] = df.apply(pd.to_numeric, errors='force').notnull().all(1).astype(int)

但是,如果需要使用带有字符串的数字,请比较类型:

df = pd.DataFrame({'foo': ['a', 1, 2, 3], 'bar': ['b', 10, 25, 9]}) 


df['baz'] = (df.applymap(type) == str).all(1).astype(int)
print (df)
bar foo baz
0 b a 1
1 10 1 0
2 25 2 0
3 9 3 0

详细信息:

print (df.applymap(type))
bar foo
0 <class 'str'> <class 'str'>
1 <class 'int'> <class 'int'>
2 <class 'int'> <class 'int'>
3 <class 'int'> <class 'int'>

关于python - 具有混合数据类型的 Pandas 条件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46793515/

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