熊猫系列弄乱了布尔

时间:2015-10-16 14:06:15

标签: python pandas boolean series

我有这个python代码使用数据框称为数据,有两列/系列标记为' Id'和' Open'充满了整数和布尔值。 但是以下代码

print(data['Id'][0])
print(data['Id'][1])
print(data['Open'][0])
print(data['Open'][1]) 
print(data['Id'][0]!=0)
print(data['Id'][1]!=0)
print(data['Open'][0]!=0)
print(data['Open'][1]!=0) 

给了我输出:

0    0
0    1
Name: Id, dtype: int64
1    0
1    2
Name: Id, dtype: int64
0    1
0    1
Name: Open, dtype: float64
1    1
1    1
Name: Open, dtype: float64
0    False
0     True
Name: Id, dtype: bool
1    False
1     True
Name: Id, dtype: bool
0    True
0    True
Name: Open, dtype: bool
1    True
1    True
Name: Open, dtype: bool

鉴于http://pandas.pydata.org/pandas-docs/stable/dsintro.html 将列描述为系列,我应该能够使用数据[' Id'] [0]并读取int和它的比较结果为零。
但是我在索引下读取了这些愚蠢的数字对,而我肯定我的df中没有元组(我从两个仅包含整数或0/1的csv中解析它)。 那么我的错误在哪里?我也尝试了iloc和loc,但结果是一样的。 那么我从熊猫文档中误解了什么呢?

附属问题:我打印过,因为我的布尔索引有问题,因为我想用data = data [data [id]> 0&数据['打开'] == 1],但它仍然失败。我之前尝试制作布尔值 列表理解

booleanopen=[True if i==1 else False for i in data['Id']] 
booleanId=[True if i>01 else False for i in data['Id']] 
booleanand=booleanopen&booleanId
data=data[booleanand]

但是它在没有回溯或错误消息的情况下连续崩溃。电脑刚好卡住几个小时。 (我想我不能用:

booleanopen=[true for i==1 in data['Id']] 

因为它会给出一个充满真实长度等于1的数组,与之前的数字相反)

1 个答案:

答案 0 :(得分:1)

  

我应该可以使用数据['Id'] [0]并读取一个int

data["Id"][0]表示“获取名为Id的列,并访问与索引0关联的数据部分”。如果您有多个具有相同索引的行,则pandas将返回它们。例如:

>>> df = pd.DataFrame({"Id": pd.Series([10,20,30], index=[0,0,1])})
>>> df["Id"][0]
0    10
0    20
Name: Id, dtype: int64
>>> df["Id"][1]
30

虽然由于某些原因你没有展示你的画面,但我很确定这是正在发生的事情。您将不得不研究如何构建它以找出原因(如果索引当前不包含任何信息,您可以始终df = df.reset_index(drop=True)返回'正常'索引。)

至于单独的问题,“但它一直失败”并没有太多用作错误报告,但可能你只是没有使用括号作为文档证明:

>>> df["Open"] = [1,2,1]
>>> df[(df["Id"] > 20) & (df["Open"] == 1)]
   Id  Open
1  30     1
>>> df.loc[(df["Id"] > 20) & (df["Open"] == 1)]
   Id  Open
1  30     1
相关问题