无法创建熊猫数据框

时间:2018-07-21 00:28:27

标签: python pandas

我在创建熊猫数据框时遇到了麻烦。有人可以解释代码出了什么问题。

column1 = ['hello']
column2 = ['world']
index = ['a','b','c']
data1 = np.linspace(0,3,1)
data2 = np.arange(3)
data = [data1, data2]
columns = [column1, column2]
df = pd.DataFrame(data = data, columns= columns, index = index)

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py", line  387, in __init__
arrays, columns = _to_arrays(data, columns, dtype=dtype)
File "/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py", line 7483, in _to_arrays
dtype=dtype)
File "/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py", line 7540, in _list_to_arrays
coerce_float=coerce_float)
File "/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py", line 7598, in _convert_object_array
con=len(content)))
AssertionError: 2 columns passed, passed data had 3 columns

2 个答案:

答案 0 :(得分:0)

您的对象data1具有三个元素。行空间创建一维数组,您需要二维数组才能代表3行和2列。

data1 = np.linspace(0,3,1)

您应该创建3行2列的数组。

答案 1 :(得分:0)

有两个问题:

  1. 您似乎正在尝试创建两列,但它们不是 相同的长度。使用np.linspace(0,3,3)来制作长度为3的数组。
  2. 如果将列表列表传递给pd.DataFrame,它将把它们解释为2D数组的行而不是列。这是错误“传递的数据有3列”的来源。请改用dict,这是首选方法。

因此,请尝试以下操作:

>>> import numpy as np
>>> import pandas as pd
>>> index = ['a','b','c']
>>> data1 = np.linspace(0,3,1)
>>> data2 = np.arange(3)
>>> data1 = np.linspace(0,3,3)
>>> df = pd.DataFrame({'hello':data1, 'world':data2}, index=index)
>>> df
   hello  world
a    0.0      0
b    1.5      1
c    3.0      2