Pandas 将列名从一个数据框复制到另一个数据框

Pandas copy column names from one dataframe to another

假设我们有两个 pandas 数据框。第一个没有列名:

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 复制列 namesno_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 中的值 NaNs.

最简单的方法是直接将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

如果你得到的是 nan,那么问题很可能是数据参数,试试这个:

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

输出:

   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.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

这个:

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

我试过最简单的一种,对我来说很管用;

no_col_names_df.columns = col_names_df.columns