我有一个包含两列的数据框XY
,一列是整数列,另一列是浮点列。
整数列称为Count
(带有大写字母C以避免出现问题),其唯一值如下:
XY["Count"].unique()
array([ 38, 7, 1, 13, 3, 28, 5, 6, 4, 11, 9, 2, 8,
22, 12, 15, 20, 17, 18, 10, 40, 14, 16, 24, 25, 39,
81, 19, 21, 110, 88, 23, 29, 46, 26, 32, 36, 43, 96,
34, 47, 61, 35, 56, 41, 33, 30, 53, 27, 54, 37, 65,
31, 52, 42, 93, 76, 57, 49, 71, 48, 77, 50, 84, 44,
69, 75, 58, 60, 55, 72, 536, 67, 80, 64, 82, 101, 99,
104, 68, 45, 66, 87, 90, 78, 74, 62, 73, 63, 86, 108,
105, 197, 118, 209, 70, 59, 98, 97, 94, 79, 89, 51, 83,
85, 221, 322, 164, 116, 103, 107, 102, 143, 91, 95, 92, 120,
188, 148, 106, 179, 124, 165, 122, 113, 119, 169, 109, 138, 123,
121, 125, 129, 177, 137, 206, 127, 115, 111, 131, 117, 128, 100,
126, 163, 133, 186, 114, 203, 135, 141, 227, 162], dtype=int64)
正如您所看到的那样,它只是整数而numpy
正确地将其解释为int64
。
现在让我们看一下提取单个值:
XY["Count"][0]
38
XY["Count"][0].dtype
numpy.int32
XY.ix[0,"Count"]
38
XY.ix[0,"Count"].dtype
numpy.int32
因此,直接建立索引并使用列标签ix
返回int32
。
XY.loc[0,"Count"]
38.0
XY.loc[0,"Count"].dtype
numpy.float64
XY.ix[0,0]
38.0
XY.ix[0,0].dtype
numpy.float64
XY.iloc[0,0]
38.0
XY.iloc[0,0].dtype
numpy.float64
但loc
,iloc
和基于索引的ix
报告的格式为float64
。
现在,当我直接从内部numpy
数组中提取值时,它也是float64
。请记住,我的第二列是浮动列。
XY.values[0,0]
38.0
XY.values[0,0].dtype
numpy.float64
我不知道我是否遗漏了某些东西,但这确实不一致并导致问题,因为我需要专门以整数格式返回数据。我认为这是一个错误。
编辑1:
当使用只有整数列的数据框进行测试时,每个方法返回int32
,所以看起来问题来自第二列和不一致的内部数据转换。
答案 0 :(得分:0)
我认为你得到了一个浮点数,因为你的数据帧的每一行都包含整数和浮点类型的混合。选择具有ix
或loc
的行索引后,整数将转换为浮点数。要解决这个问题,您可以使用loc从所需的列中进行选择,而不是从整个数据框中进行选择:
XY['Count'].loc[4]