【问题标题】:Python ValueError: cannot copy sequence to arrayPython ValueError:无法将序列复制到数组
【发布时间】:2018-12-20 04:58:46
【问题描述】:

我有一个 .csv 数据集,其中三列的格式如下

  t           X      Y
 0.040662  1.041667  1
 0.139757  1.760417  2
 0.144357  1.190104  1
 0.145341  1.047526  1
 0.145401  1.011882  1
 0.148465  1.002970  1

而不是手动写成

x_final = np.array([1.041667, 1.760417, 1.190104, 1.047526, 1.011882, 1.002970])
v_observations = np.array([1, 2, 1, 1, 1, 1])

我想通过将 pandas 数据帧复制到一个数组来自动执行它,这是我的代码

import numpy as np
from numpy.linalg import inv
import pandas as pd

df = pd.read_csv('testdata.csv')
print(df)

df.dropna(inplace=True)

X = df.drop('Y', axis=1)
y = df['Y']

time = df.drop('t', axis=1)
print(X)
d1= np.array([X])
d2 = np.array([y])

x_final = np.array([d1])
y_final = np.array([d2])
z = np.c_[x_final, y_final]

但是,当我尝试运行我的代码时出现此错误。

ValueError: cannot copy sequence with size 6 to array axis with dimension 2

我该如何解决这个错误?

【问题讨论】:

  • 怎么样:z = df.dropna().drop('t', axis=1).values
  • 错误从这里开始d1= np.array([X]) 在我尝试逐行运行之前到达那里。

标签: python python-3.x pandas numpy


【解决方案1】:

tl;dr: 使用.values

您的问题是,当您创建 numpy 数组时,您正在向它传递一个列表,而我认为您正试图向它传递一个数据框:

# This doesn't work
np.array([X])
# This does
np.array(X)

所以你可以这样做:

d1= np.array(X)
d2 = np.array(y)

或者更好:

d1 = X.values
d2 = y.values

获得:

>>> d1
array([[0.040662, 1.041667],
       [0.139757, 1.760417],
       [0.144357, 1.190104],
       [0.145341, 1.047526],
       [0.145401, 1.011882],
       [0.148465, 1.00297 ]])
>>> d2
array([1, 2, 1, 1, 1, 1])

但最终,您的最终结果将与简单地说:

z = df.dropna().values
>>> z
array([[0.040662, 1.041667, 1.      ],
       [0.139757, 1.760417, 2.      ],
       [0.144357, 1.190104, 1.      ],
       [0.145341, 1.047526, 1.      ],
       [0.145401, 1.011882, 1.      ],
       [0.148465, 1.00297 , 1.      ]])

请参阅 docs 以了解 .values 方法,它只是为您提供数据帧的 numpy 表示

【讨论】:

  • 这很干净。但是当我尝试运行z 时,它会显示ValueError: all the input arrays must have same number of dimensions
  • 我认为,从一开始就使用z = df.dropna().values,而不是经历整个复杂的处理过程,您的头痛就会少得多。
  • 你太棒了。即使它不适合我,但我必须将其标记为可接受的答案。我正在尝试重现此代码,但我不知道为什么它不起作用 :( 伤心。https://medium.com/@jaems33/understanding-kalman-filters-with-python-2310e87b8f48 他已将所有代码放在最后 Putting it all together 下,这就是我尝试重现的原因。跨度>
【解决方案2】:

a 我认为您甚至不需要执行所有这些步骤。从 pandas 数据帧迁移到 numpy 二维数组是无缝的。

df.dropna(inplace=True)
df_numpy = df.drop("t", axis=1).values

【讨论】:

    猜你喜欢
    • 2018-01-02
    • 2016-01-02
    • 2013-09-12
    • 2020-10-15
    • 2016-09-20
    • 2021-07-24
    • 2023-03-06
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多