Pandas将列名从一个 Dataframe 复制到另一个 Dataframe

pxiryf3j  于 2023-03-28  发布在  其他
关注(0)|答案(5)|浏览(321)

假设我们有两个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复制到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的值。

91zkwejq

91zkwejq1#

就像你使用了数据框中的列和列名一样,你可以使用数据框中的值而不使用列名:
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
kuhbmx9i

kuhbmx9i2#

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

vngu2lb83#

这一点:

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

给你所有的'NaN'数据框,因为你传递一个数据框来构造一个新的数据框,并将新的columns分配给它。Pandas本质上构造了相同的数据框,并在其上沿着axis 1执行reindex。换句话说,该命令相当于执行:

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

您需要直接更改no_col_names_df.columns或传递no_col_names_df.values

q9rjltbz

q9rjltbz4#

如果你得到了nan,那么最有可能的问题是data参数,试试这个:

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
mwecs4sa

mwecs4sa5#

我试过最简单的一个,它是为我工作;
no_col_names_df.columns = col_names_df.columns

相关问题