python if语句返回值错误

时间:2015-06-04 08:20:36

标签: python pandas

我很遗憾地问这个看似简单的问题,但我是一个蟒蛇初学者,无法在任何地方找到答案。我想运行一个简单的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}}

5 个答案:

答案 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.bList是否等于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.