用列形式NumPy数组创建Pandas DataFrame报错,是否支持该格式?
关于用列式NumPy数组创建Pandas DataFrame的问题
当然支持你说的这种「每个子数组代表一列数据」的格式啦,只是你需要调整下创建DataFrame的方式——默认的构造逻辑和你预期的不一样才导致了报错。
为什么会报错?
你第二个示例里的data是一个2行3列的NumPy数组:
data = np.array([[1,2,2] , [1,5,3]]) # 数组形状为 (2, 3):2行,每行包含3个元素
而你指定了columns=['1','2'](共2列),Pandas默认会把输入数组的每一行作为DataFrame的一行。这就出现了矛盾:每行有3个元素,却要放到2列里,自然就抛出ValueError: Wrong number of items passed 3, placement implies 2的错误了。
两种解决方法
方法1:转置你的NumPy数组
把数组的行和列互换,让原来的列变成行,数组形状从(2,3)转为(3,2),就能和columns的数量匹配:
import numpy as np import pandas as pd columns = ['1','2'] data = np.array([[1,2,2] , [1,5,3]]) df_1 = pd.DataFrame(data.T, columns=columns) # 用.T实现数组转置 print(df_1)
输出结果:
1 2 0 1 1 1 2 5 2 2 3
方法2:直接按列映射创建
更直观的方式是把每个子数组和对应的列名绑定,用字典形式传入pd.DataFrame(),明确告诉Pandas「每个数组对应一列」:
import numpy as np import pandas as pd columns = ['1','2'] data = np.array([[1,2,2] , [1,5,3]]) df_1 = pd.DataFrame({col: arr for col, arr in zip(columns, data)}) print(df_1)
得到的结果和上面完全一致,这种写法能直接体现你的数据结构意图,可读性更强。
总结
Pandas不是只能用「每行代表DataFrame一行」的格式,只要你明确告诉它数据的结构,不管是行式还是列式都能处理。上面两种方法都能帮你用列式的NumPy数组创建出正确的DataFrame。
内容的提问来源于stack exchange,提问作者blue-sky
相关产品推荐
相关产品推荐

