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
复制列 names 到 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
s.
最简单的方法是直接将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
假设我们有两个 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
复制列 names 到 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
s.
最简单的方法是直接将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