Ach*_*age 5 python numpy dataframe pandas
我想使用 2D numpy 数组创建一个新的单列 pandas 数据框。显然,每一行应该包含一维列表。以下是一个简化的可重现示例。
import pandas as pd
import numpy as np
arr = np.ones((4,3)) # could be any 2D array
Run Code Online (Sandbox Code Playgroud)
我想要的是,
lists
0 [1, 1, 1]
1 [1, 1, 1]
2 [1, 1, 1]
3 [1, 1, 1]
Run Code Online (Sandbox Code Playgroud)
现在,df = pd.DataFrame(arr, columns=['lists'])给出错误,
ValueError: Shape of passed values is (4, 3), indices imply (4, 1)
Run Code Online (Sandbox Code Playgroud)
并df = pd.DataFrame(list(arr), columns=['lists'])给出错误,
ValueError: 1 columns passed, passed data had 3 columns
Run Code Online (Sandbox Code Playgroud)
最后,df = pd.DataFrame(arr.flatten(), columns=['lists'])给出一个错误的数据框,所有单元格都有一个标量1。
我怎样才能得到我想要的东西?
data = {"lists": list(arr)}
df = pd.DataFrame(data, columns=['lists'])
print(df)
Run Code Online (Sandbox Code Playgroud)
输出:
lists
0 [1.0, 1.0, 1.0]
1 [1.0, 1.0, 1.0]
2 [1.0, 1.0, 1.0]
3 [1.0, 1.0, 1.0]
Run Code Online (Sandbox Code Playgroud)
从 2d 数组(即 1d 数组)的每一行,构造一个包含该行的单例元组,并从该行构建 DataFrame 。我们可以使用生成器表达式优雅地做到这一点:
>>> df = pd.DataFrame(((x,) for x in arr), columns=['lists'])
>>> df
lists
0 [1.0, 1.0, 1.0]
1 [1.0, 1.0, 1.0]
2 [1.0, 1.0, 1.0]
3 [1.0, 1.0, 1.0]
Run Code Online (Sandbox Code Playgroud)
构造函数迭代元组而不是底层数组,以确定给定行中的列值。有一个这样的值 - 一维数组 - 因此该行的值存储在单个可用列中。
单元格值确实是 Numpy 数组:
>>> df['lists'][0]
array([1., 1., 1.])
Run Code Online (Sandbox Code Playgroud)