【发布时间】:2015-05-28 12:07:42
【问题描述】:
我有一个 pandas 数据框,其中有一列包含由两个浮点数组成的元组,例如(1.1,2.2)。我希望能够生成一个包含每个元组的第一个元素的数组。我可以遍历每一行并获取每个元组的第一个元素,但数据帧包含近 400 万条记录,这种方法非常慢。 satoru 在 SO (stackoverflow.com/questions/6454894/reference-an-element-in-a-list-of-tuples) 上的回答建议使用以下机制:
>>> import numpy as np
>>> arr = np.array([(1.1,2.2),(3.3,4.4),(5.5,6.6),(7.7,8.8)])
>>> arr
array([[ 1.1, 2.2],
[ 3.3, 4.4],
[ 5.5, 6.6],
[ 7.7, 8.8]])
>>> arr[:,0]
array([ 1.1, 3.3, 5.5, 7.7])
所以效果很好,绝对适合我的需求。但是,当我尝试从 pandas 数据框创建一个 numpy 数组时,就会出现问题。在这种情况下,上述解决方案会因各种错误而失败。例如:
>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({'other':[0,0,0,1,1],'point':[(1.1,2.2),(3.3,4.4),(5.5,6.6),(7.7,8.8),(9.9,0.0)]})
>>> df
other point
0 0 (1.1, 2.2)
1 0 (3.3, 4.4)
2 0 (5.5, 6.6)
3 1 (7.7, 8.8)
4 1 (9.9, 0.0)
>>> arr2 = np.array(df['point'])
>>> arr2
array([(1.1, 2.2), (3.3, 4.4), (5.5, 6.6), (7.7, 8.8), (9.9, 0.0)], dtype=object)
>>> arr2[:,0]
IndexError: too many indices for array
或者:
>>> arr2 = np.array([df['point']])
>>> arr2
array([[[1.1, 2.2],
[3.3, 4.4],
[5.5, 6.6],
[7.7, 8.8],
[9.9, 0.0]]], dtype=object)
>>> arr2[:,0]
array([[1.1, 2.2]], dtype=object) # Which is not what I want!
当我将数据从 pandas 数据帧传输到 numpy 数组时,似乎出了点问题 - 但我不知道是什么。如有任何建议,我们将不胜感激。
【问题讨论】:
标签: python arrays numpy pandas dataframe