6

如何从 DataFrame 中的两列创建结构化数组?我试过这个:

df = pd.DataFrame(data=[[1,2],[10,20]], columns=['a','b'])
df

    a   b
0   1   2
1   10  20

x = np.array([([val for val in list(df['a'])],
               [val for val in list(df['b'])])])

但这给了我这个:

array([[[ 1, 10],
        [ 2, 20]]])

但我想要这个:

[(1,2),(10,20)]

谢谢!

4

3 回答 3

10
于 2018-07-11T08:23:18.283 回答
1

使用列表推导将嵌套list的 s 转换为tuples:

print ([tuple(x) for x in df.values.tolist()])
[(1, 2), (10, 20)]

详情

print (df.values.tolist())
[[1, 2], [10, 20]]

编辑:您可以通过to_records然后转换为np.asarray,检查链接

df = pd.DataFrame(data=[[True, 1,2],[False, 10,20]], columns=['a','b','c'])
print (df)
       a   b   c
0   True   1   2
1  False  10  20

print (np.asarray(df.to_records(index=False)))
[( True,  1,  2) (False, 10, 20)]
于 2018-07-11T07:51:12.283 回答
0

这是一个单行:

list(df.apply(lambda x: tuple(x), axis=1))

或者

df.apply(lambda x: tuple(x), axis=1).values
于 2018-07-11T08:07:02.333 回答