【发布时间】:2016-01-15 07:47:41
【问题描述】:
我有这个 python 代码,它使用一个名为 data 的数据框,有两列/系列标记为“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
将列描述为系列,我应该能够使用 data['Id'][0] 并读取一个 int 并将其与零进行比较的结果。
但是我改为在索引下阅读这些愚蠢的数字,而我很肯定我的 df 中没有元组(我从两个仅包含整数或 0/1 的 csv 解析它)。
那么我的错误在哪里?我也试过 iloc 和 loc ,但结果是一样的。
那么我从 pandas 文档中误解了什么?
辅助问题:我打印了那个,因为我的布尔索引有问题,因为我想用 data=data[data[id]>0 & data['open']==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的个数,与前一个相反)
【问题讨论】:
标签: python pandas boolean series