【问题标题】:create column at specific position using Pandas使用 Pandas 在特定位置创建列
【发布时间】:2020-12-10 05:39:04
【问题描述】:

场景:两个数据框:

result_datapd:列 A B C D E F G H

result_datapd2:列 A C E G H

我正在尝试在 result_datapd2 中插入两列:

result_datapd2:列 A B C D E F G H

这是我的代码:

for n in range(len(result_datapd.columns.difference(result_datapd2.columns))):
    name_column = result_datapd.columns.difference(result_datapd2.columns)[n]
    loc_column = result_datapd.columns.get_loc(name_column)
    print(name_column)
    print(loc_column)
    result_datapd2.insert(loc=loc_column, column=name_column, value = '')

当我运行时,我收到了这个错误:

IndexError:索引 2 超出轴 0 的范围,大小为 1

数据框结果是这样的

result_datapd2:列 A B C E D G H

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您正在更改 inplace result_datapd2(添加列),以便它打乱循环。如果你想拥有与result_datapd相同的列顺序,你可以正常添加列,然后相应地排序:

    # Data
    result_datapd = pd.DataFrame(columns=list('ABCDEFGH'))
    result_datapd2 = pd.DataFrame(columns=list('ACEGH'))
    
    # Get distinct columns
    distint_cols = result_datapd.columns.difference(result_datapd2.columns)
    # Add new columns
    result_datapd2[distint_cols] = result_datapd[distint_cols]
    # Order columns like result_datapd
    result_datapd2[result_datapd.columns]
    

    【讨论】:

      【解决方案2】:

      在您的 for 循环中,您可以通过在每个循环中添加一列来修改 result_datapd2。因此,随着列的添加,每次迭代都会改变差异。这就是索引超出范围的原因。如果您制作原始数据框的副本,这将不再是问题。但是,更节省空间的方法可能是预先将列名复制到列表中。

      result_datapd = pd.DataFrame(columns=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'])
      result_datapd2 = pd.DataFrame(columns=['A', 'C', 'E', 'G', 'H'])
      result_datapd2_copy = result_datapd2.copy()
      
      for n in range(len(result_datapd.columns.difference(result_datapd2_copy.columns))):
          name_column = result_datapd.columns.difference(result_datapd2_copy.columns)[n]
          loc_column = result_datapd.columns.get_loc(name_column)
          print(name_column)
          print(loc_column)
          result_datapd2.insert(loc=loc_column, column=name_column, value = '')
      

      【讨论】:

        猜你喜欢
        • 2020-09-16
        • 1970-01-01
        • 2017-07-19
        • 1970-01-01
        • 2023-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多