为什么每个项目的pd.DataFrame的类型都是float,而pd.DataFrame的dtype是对象?

时间:2018-11-16 00:37:26

标签: python pandas

results_table是一个pd.DataFrame

当我

print(type(results_table.loc[0,'Mean recall score']))

返回

<class 'numpy.float64'>

每个项目都是float

但是当我

print(results_table['Mean recall score'].dtype)

返回

object

为什么会有这种行为?

2 个答案:

答案 0 :(得分:0)

第一个注释df.loc[0, x]仅考虑行标签0和列标签x中的值,整个数据框。现在让我们考虑一个示例:

df = pd.DataFrame({'A': [1.5, 'hello', 'test', 2]}, dtype=object)

print(type(df.loc[0, 'A']))  # type of single element in series

<class 'float'>

print(df['A'].dtype)         # type of series

object

如您所见,object dtype系列可以容纳任意Python对象。您甚至可以根据需要提取系列中每个元素的类型:

print(df['A'].map(type))

0    <class 'float'>
1      <class 'str'>
2      <class 'str'>
3      <class 'int'>
Name: A, dtype: object

object dtype系列只是指向连续内存块中保存的各种对象的指针的集合,数字序列可能就是这种情况。这可与Python list相提并论,并解释了为什么在使用object而不是数字序列时性能很差。

有关上述内容的视觉表示,另请参见this answer

答案 1 :(得分:0)

在第一个打印语句中,您从数据框中切出一个元素。您正在查看的单个项目是一个浮动项目。

在第二个打印语句中,您实际上是在提取熊猫系列(即,您要提取整列)并打印该类型。

pandas系列是一个对象,但是系列中的每个条目都是一个float。因此,这就是您获得成功的原因。