【问题标题】:Pandas copy column names from one dataframe to anotherPandas 将列名从一个数据框复制到另一个数据框
【发布时间】:2019-09-28 13:19:49
【问题描述】:

假设我们有两个 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 的值,而是NaNs。

【问题讨论】:

    标签: python pandas dataframe columnname


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果可能的话,希望得到一些关于否决票的反馈 :)
      【解决方案3】:

      就像您使用数据框中的列和列名一样,您可以使用数据框中的值而不使用列名:

      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
      

      【讨论】:

      • 这正是我的答案顺便说一句,发布一个与以前共享的答案相比没有任何价值的答案是一种不应鼓励的行为
      • 我们在相隔几秒的时间间隔发帖。当我开始写我的答案时,你的答案还没有。这里没有恶意。
      • 不是说有意图。不过既然你发的和我一样,标准就是删掉后面发的那个。
      【解决方案4】:

      这个:

      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

      【讨论】:

        【解决方案5】:

        我尝试了最简单的一种,它对我有用;

        no_col_names_df.columns = col_names_df.columns

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-08-03
          • 2021-04-10
          • 2020-10-18
          • 1970-01-01
          • 2018-03-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多