Панды копируют имена столбцов из одного кадра данных в другой - PullRequest
1 голос
/ 10 мая 2019

Допустим, у нас есть два фрейма данных панд. Первый не имеет имен столбцов:

no_col_names_df = pd.DataFrame(np.array([[1,2,3], [4,5,6], [7,8,9]]))

Второй имеет:

col_names_df = pd.DataFrame(np.array([[10,2,3], [4,45,6], [7,18,9]]),
                           columns=['col1', 'col2', 'col3'])

То, что я хочу сделать, это получить копию столбца имен из col_names_df в no_col_names_df, чтобы создать следующий фрейм данных:

    col1    col2    col3
0   1       2       3
1   4       5       6
2   7       8       9

Я пробовал следующее:

new_df_with_col_names = pd.DataFrame(data=no_col_names_df, columns=col_names_df.columns)

но вместо значений из no_col_names_df я получаю NaN с.

Ответы [ 4 ]

4 голосов
/ 10 мая 2019

Самый простой способ - напрямую назначить столбцы col_names_df столбцам no_col_names_df:

no_col_names_df.columns = col_names_df.columns

     col1  col2  col3
0     1     2     3
1     4     5     6
2     7     8     9
1 голос
/ 10 мая 2019

Это:

pd.DataFrame(data=no_col_names_df, columns=col_names_df.columns)

дает вам весь NaN-фрейм данных, потому что вы передаете фрейм данных для создания нового фрейма данных и назначаете ему новый columns. По сути, Pandas создает идентичный фрейм данных и делает на нем reindex вдоль axis 1. Другими словами, эта команда эквивалентна выполнению:

no_col_names_df.reindex(col_names_df.columns, axis=1)

Вам нужно либо изменить напрямую no_col_names_df.columns, либо передать no_col_names_df.values

1 голос
/ 10 мая 2019

Так же, как вы использовали столбцы из информационного кадра с именами столбцов, вы можете использовать значения из информационного кадра без имен столбцов:

new_df_with_col_names = pd.DataFrame(data=no_col_names_df.values, columns=col_names_df.columns)


In [4]: new_df_with_col_names = pd.DataFrame(data=no_col_names_df, columns=col_names_df.columns)

In [5]: new_df_with_col_names
Out[5]:
   col1  col2  col3
0   NaN   NaN   NaN
1   NaN   NaN   NaN
2   NaN   NaN   NaN

In [6]: new_df_with_col_names = pd.DataFrame(data=no_col_names_df.values, columns=col_names_df.columns)

In [7]: new_df_with_col_names
Out[7]:
   col1  col2  col3
0     1     2     3
1     4     5     6
2     7     8     9
1 голос
/ 10 мая 2019

Если вы получаете Nan, то, скорее всего, проблема заключается в параметре данных, попробуйте это:

new_df_with_col_names = pd.DataFrame(data=no_col_names_df.values, columns=col_names_df.columns)

output:

   col1  col2  col3
0     1     2     3
1     4     5     6
2     7     8     9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...