我有这个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的数组,与之前的数字相反)
答案 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