【问题标题】:Converting numpy ndarray into pandas dataframe with column names and types使用列名和类型将 numpy ndarray 转换为 pandas 数据框
【发布时间】:2018-08-14 18:37:39
【问题描述】:

编辑:正如下面@floydian 的评论中所解释的,问题是调用a = np.array(a, dtype=d) 创建了一个导致问题的双精度数组。

我知道这已经被问过很多次了,事实上我现在正在查看Creating a Pandas DataFrame with a numpy array containing multiple types 的答案。但是我在转换时似乎仍然有问题。我想念的东西一定很简单。希望有人能这么好心指出来。示例代码如下:

import numpy as np
import pandas as pd

a = np.array([[1, 2], [3, 4]])
d = [('x','float'), ('y','int')]
a = np.array(a, dtype=d)

# Try 1
df= pd.DataFrame(a)
# Result - ValueError: If using all scalar values, you must pass an index

# Try 2
i = [1,2]
df= pd.DataFrame(a, index=i)
# Result - Exception: Data must be 1-dimensional

【问题讨论】:

  • 你的预期输出是什么?
  • 具有指定列名和数据类型的DataFrame
  • 我的意思是,是的,但它看起来像什么?第一列是int,第二列是float吗?
  • 例如,您在寻找pd.DataFrame(a.ravel())吗?
  • 哦,对,就是这样:第一列 int,第二列 float

标签: python pandas numpy


【解决方案1】:

事后分离它的一种选择可能是例如

pd.DataFrame(a.astype("float32").T, columns=a.dtype.names).astype({k: v[0] for k, v in a.dtype.fields.items()})

Out[296]: 
     x  y
0  1.0  3
1  2.0  4

【讨论】:

    【解决方案2】:

    我会这样定义数组:

    a = np.array([(1, 2), (3, 4)], dtype=[('x','float'), ('y', 'int')])
    pd.DataFrame(a)
    

    得到你想要的。

    【讨论】:

    • 不幸的是,在我原来的问题中,数组是按照我上面的方式定义的。
    • a = np.array(a, dtype=d) 创建两个 2x2 数组,a['x'] 将 float 作为 dtype 应用于所有值,a['y'] 将 int 作为 dtype 应用于所有值。我猜这就是你得到所有这些错误的原因。
    • 确实是这个原因。谢谢你指出我正确的方向。
    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2015-08-07
    • 2017-06-28
    • 2020-02-20
    相关资源
    最近更新 更多