如果我有一个pandas DataFrame
df = read_csv("infile.csv")
其中infile看起来像
i1,i2,f1,f2
3,1,0.1,2.0
2,1,0.3,0.5
即。两列整数和一个浮点数。
如果我使用以下命令查询此DataFrame:
print type(df["i1"].ix[0])
类型是(正如我所料,它也是!)np.int64
然而,如果我使用:
print type(df.ix[0]["i1"])
类型为np.float64
这是正确的行为还是错误?
我想这是因为:
df.ix[0]
创建一个系列对象,[" i1"]然后选择?但这仍然很烦人。
答案 0 :(得分:3)
正如你自己注意到的那样,这确实是预期的行为,因为在df.ix[0]["i1"]
你首先为第一行创建一个系列(所以所有项目都被浮动以获得一个dtype),然后才拿到该项目带有标签"i1"
解决方案很简单:不要使用此链式索引,但在一个索引调用中结合两个查找(行和列):
df.ix[0, "i1"]
还有其他充分的理由可以避免这种链式索引(遇到查看/复制问题):http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy