Как заполнить pandas dataframe одним и тем же массивом - PullRequest
0 голосов
/ 07 октября 2019

Попытка заполнить фрейм данных pandas массивом (скажем, np.zeros (200)).

Если мы хотим заполнить фрейм данных pandas значением:

for col in df.columns:
    df[col].values[:] = 2

это работает нормально, но делать то же самое с:

for col in df.columns:
    df[col].values[:] = np.zeros(200)

не будет работать.

Я не понимаю, почему выдается ошибка (не удалось передать входной массив X в форму Y,) так как я думал, что заполняю каждое значение кадра данных индивидуально, то, по моему мнению, форма не имеет значения.

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

Предполагая, что у меня есть матрица из 200 строк:

df = pd.DataFrame(
    np.random.randint(1, 20,size=(200,3)),
    columns = ['one','two','three']
)
df.head()

    one two three
0   6   11  12
1   9   10  5
2   16  11  6
3   14  5   10
4   19  5   4

При размещении: df [col] .values ​​Он не относится к самому столбцу, он только получает преобразование серии в массив,еще больше при установке [:] он получает копию памяти полученного массива.

Правильная форма будет выглядеть так:

for col in df.columns:
    df.loc[:, col] = np.zeros(200)
df.head()

    one two three
0   0.0 0.0 0.0
1   0.0 0.0 0.0
2   0.0 0.0 0.0
3   0.0 0.0 0.0
4   0.0 0.0 0.0

Если вы хотите выполнить эту работу с другими массивами, которыене содержат только нули

0 голосов
/ 07 октября 2019

Как вы, возможно, знаете, панды построены на вершине numpy. Когда вы делаете:

df[col].values[:] # This return a series

Вы получаете серию, это похоже на массив с нулевыми значениями.

Теперь, когда вы делаете

np.zeros(200)

Вы получаете массив 1-D, но ошибка, которую вы получаете, говорит о том, что ваши серии панд не имеют такой же длины, как и ваш массив numpy.

Чтобы делать то, что вы хотите, лучше сделать так:

df.iloc[:,:] = 0

В общем, старайтесь избегать зацикливания на массиве, в большинстве случаев есть встроенный метод, который сделает эту работу.

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