4

我有一个这样的数据框:

在此处输入图像描述

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

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

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

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

4

2 回答 2

5

您可以逐列转换:

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()

您的专栏很可能amountfloat. 你有NaN这个专栏吗?这些总是类型float,并且会构成整个专栏float

您可以int使用:

df.values.astype(int).tolist()
于 2016-01-17T12:47:05.777 回答
1

我认为熊猫文档有帮助:

DataFrame.values

NDFrame 的 Numpy 表示

dtype 将是较低的公分母 dtype(隐式向上转换);也就是说,如果混合了 dtypes(甚至是数字类型),则将选择容纳所有类型的数据类型。如果您不处理这些块,请小心使用它。

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

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

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

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

于 2016-01-17T12:48:38.333 回答