数据框 values.tolist() 数据类型

dataframe values.tolist() datatype

我有一个这样的数据框:

这个数据框有几列。两个是 float 类型:pricechange,而 volmeamountint 类型。 我使用方法 df.values.tolist() 更改 df 以列出并获取数据:

datatmp = df.values.tolist()
print(datatmp[0])

[20160108150023.0, 11.12, -0.01, 4268.0, 4746460.0, 2.0]

df中的int类型全部变为float类型。 我的问题是为什么 int 类型会更改为 float 类型?我怎样才能得到我想要的int数据?

可以转换column-by-column:

by_column = [df[x].values.tolist() for x in df.columns]

这将保留每列的数据类型。

比转换成你想要的结构:

list(list(x) for x in zip(*by_column))

一行即可完成:

list(list(x) for x in zip(*(df[x].values.tolist() for x in df.columns)))

您可以检查列的数据类型:

df.info()

您的列 amount 很可能是 float 类型。这个栏目有没有NaN?这些总是 float 类型,并且会使整个列 float.

您可以转换为 int

df.values.astype(int).tolist()

我认为 pandas 文档有帮助:

DataFrame.values

Numpy representation of NDFrame

The dtype will be a lower-common-denominator dtype (implicit upcasting); that is to say if the dtypes (even of numeric types) are mixed, the one that accommodates all will be chosen. Use this with care if you are not dealing with the blocks.

所以这里显然选择了 float 来容纳所有组件类型。一个简单的方法是(但是,很可能周围有更优雅的解决方案,我对 pandas 不太熟悉):

datatmp = map(lambda row: list(row[1:]), df.itertuples())

此处 itertuples() 给出了一个迭代器,其元素的形式为 (rownumber, colum1_entry, colum2_entry, ...)。该映射采用每个这样的元组并应用 lambda 函数,该函数删除第一个组件 (rownumber) 和 returns 包含单行组件的列表。如果可以使用元组列表,您还可以删除 list() 调用。

[数据帧值 属性][1] “http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.values.html#pandas.DataFrame.values