簡體   English   中英

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復制到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

就像您使用帶有列名的數據幀中的列一樣,您可以使用來自數據幀的值而不使用列名:

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

最簡單的方法是將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

這個:

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

如果你得到 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

我嘗試了最簡單的方法,它對我有用;

no_col_names_df.columns = col_names_df.columns

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM