Python ValueError: невозможно скопировать последовательность в массив - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть набор данных .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

Как я могу исправить эту ошибку?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

а Я не думаю, что вам даже нужно делать все эти шаги.Переход от фрейма данных Pandas к массивному двумерному массиву происходит без проблем.

df.dropna(inplace=True)
df_numpy = df.drop("t", axis=1).values
0 голосов
/ 19 декабря 2018

tl; dr: use .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,который просто дает вам пустое представление кадра данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...