【问题标题】:converting python pandas column to numpy array in place将 python pandas 列转换为 numpy 数组
【发布时间】:2015-12-04 11:30:30
【问题描述】:

我有一个 csv 文件,其中一列是以分号分隔的可变长度浮点数列表。例如:

Index    List
0        900.0;300.0;899.2
1        123.4;887.3;900.1;985.3

当我将其读入 pandas DataFrame 时,该列的数据类型是对象。我想将它转换为一个 numpy 数组(或者只是一个常规的浮点数组,在这个阶段并不重要)。

我写了一个小函数,它采用其中一个列表元素并将其转换为一个 numpy 数组:

def parse_list(data):
    data_list = data.split(';')
    return np.array(map(float, data_list))

这很好用,但我想做的是直接在DataFrame中进行这种转换,这样我就可以在转换后使用pandasql等来操作整个数据集。有人能指出我正确的方向吗?

编辑:我似乎问得不好。我想转换以下数据框:

Index    List
0        900.0;300.0;899.2
1        123.4;887.3;900.1;985.3

其中 List 的 dtype 是 'object'

到以下数据框:

Index    List
0        [900.0, 300.0, 899.2]
1        [123.4, 887.3, 900.1, 985.3]

List 的数据类型是 numpy 浮点数组

EDIT2:由于第一个答案,取得了一些进展。我现在有这条线:

df['List'] = df['List'].str.split(';')

将列拆分为一个数组,但当我尝试这样做时,dtypes 仍然是对象

df['List'] = df['List'].astype(float)

我得到错误: 返回 arr.astype(dtype) ValueError: 使用序列设置数组元素。

【问题讨论】:

  • 你想要一个他值的单个 np 数组还是一个新的 df OK df['List'].str.split(';', expand=True).astype(np.float64)
  • 当您说到位时,您只是想将str 转换为float
  • 这很难到位,因为pandas会在apply之后扩展结构
  • pandas 不适合将每个单元格的数据转换为类似数组的类型,在 ctor 中这样做会更容易,它会尝试做一些巧妙的解包,所以你必须做 fugly黑客
  • 关于你的最后一个错误,你所做的只是生成一个拆分字符串的列表,你仍然需要将每个元素转换为一个浮点数,这就是为什么我这样做了 expand=True允许我使用astype 转换结果 df dtype

标签: python-2.7 csv numpy pandas


【解决方案1】:

如果我理解正确,您希望将数据从 pandas 转换为 numpy 数组。 我用这个:

pandas_DataName.as_matrix(columns=None)

它对我有用。 欲了解更多信息,请访问here

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 2018-12-27
    • 2021-11-29
    • 2019-08-04
    • 2020-02-10
    • 2019-10-30
    • 2018-02-27
    • 2019-05-05
    • 2017-06-28
    相关资源
    最近更新 更多