我很遗憾地问这个看似简单的问题,但我是一个蟒蛇初学者,无法在任何地方找到答案。我想运行一个简单的if语句,但是python只返回:
import pandas as pd
df = pd.DataFrame({'a': [None] * 4, 'b': [2, 3, 10, 3]})
df["c"] =0
if df.b == 2:
df.c =1
无论我申请哪种替代方案 - 它都行不通。你有什么想法吗?
{{1}}
答案 0 :(得分:3)
在if
语句中,您尝试将数组与标量进行比较。你可以使用像
if df.b[0] == 2:
df.c =1
或
if 2 in df.b:
df.c =1
如果要检查数组中的特定元素。
答案 1 :(得分:2)
您无法将标量与使用if
的数组进行比较,如果其中一个值匹配,或者除了您想要执行的操作之外的所有内容,它就变得模棱两可:
In [3]:
df['c'] = np.where(df['b'] == 2, 1, np.NaN)
df
Out[3]:
a b c
0 None 2 1
1 None 3 NaN
2 None 10 NaN
3 None 3 NaN
使用np.where
查看该条件的整个数组,如果True
返回1
,则NaN
您可以使用以下语法执行比较:
In [4]:
df['b'] == 2
Out[4]:
0 True
1 False
2 False
3 False
Name: b, dtype: bool
但不使用if
,除非您要比较单个值:
In [8]:
for index, row in df.iterrows():
if row['b'] == 2:
print('equals 2')
else:
print('some other value')
equals 2
some other value
some other value
some other value
答案 2 :(得分:1)
您将df.b
设置为包含四个数字的列表。它永远不会等于一个数字。
Pandas无法使用==
将列表与任何内容进行比较,因为它不清楚您想要的答案,因此它会提示您解释。
http://pandas.pydata.org/pandas-docs/stable/gotchas.html
我根本不认为你会这样做,但是你不清楚你期望发生什么。
答案 3 :(得分:0)
您正在尝试检查df.b
,List
是否等于int
。
试试这个:
if 2 in df.b:
df.c=1
答案 4 :(得分:0)
好吧,先关闭。你试图在整个字典上使用条件!
你基本上是在说“如果这个dicitonary == 2”,这只是一个含糊不清的陈述,因为该词典(df.b)是一组值,不一定评价为“真”......
df.b是
0 2
1 3
2 10
3 3
老实说,根据你的问题,我不完全确定你要评估的是什么!在df.b的子分解中进行评估之前,您应该尝试打印df.