【问题标题】:dataframe values.tolist() datatype数据框 values.tolist() 数据类型
【发布时间】:2023-04-01 13:44:01
【问题描述】:

我有一个这样的数据框:

此数据框有几列。两个是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 数据?

【问题讨论】:

标签: python pandas tolist


【解决方案1】:

您可以逐列转换:

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

【讨论】:

  • 我想获取具有float和int两种类型而不是和类型的列表数组数据,比如[20160108150023, 11.12, -0.01, 4268, 4746460, 2]
【解决方案2】:

我认为 pandas 文档有帮助:

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"

【讨论】:

  • 如何改用get_value(),我想得到float和int两种类型的list数组数据
  • 也许我添加的方法适合您的需求?
  • 如何使用方法可以得到我想要的结果
猜你喜欢
  • 1970-01-01
  • 2014-02-03
  • 2017-10-27
  • 1970-01-01
  • 2022-01-02
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
相关资源
最近更新 更多