【问题标题】:How can I create many columns after a list in pandas?如何在熊猫列表之后创建许多列?
【发布时间】:2016-12-01 11:55:45
【问题描述】:

我有一个数据框,我想在列表之后创建很多新列并填充0,我该怎么做?

例如:

df = pd.DataFrame({"a":["computer", "printer"]})
print(df)
>>>          a
>>>0  computer
>>>1   printer

我有一个清单

myList=["b","c","d"]

我希望我的新数据框看起来像:

>>>          a  b  c  d
>>>0  computer  0  0  0
>>>1   printer  0  0  0

我该怎么做?

【问题讨论】:

    标签: python pandas dataframe append multiple-columns


    【解决方案1】:

    使用最快的解决方案:

    for col in myList:
        df[col] = 0
    
    print(df)
              a  b  c  d
    0  computer  0  0  0
    1   printer  0  0  0
    

    另一种解决方案是使用concatDataFrame 构造函数:

    pd.concat([df3,pd.DataFrame(columns=myList, index=df.index, data=0)], axis=1)
    

    时间安排

    [20000 行 x 300 列]

    In [286]: %timeit pd.concat([df,pd.DataFrame(columns=myList)], axis=1).fillna(0)
    1 loop, best of 3: 1.17 s per loop
    
    In [287]: %timeit pd.concat([df3,pd.DataFrame(columns=myList, index=df.index,data=0)],axis=1)
    10 loops, best of 3: 81.7 ms per loop
    
    In [288]: %timeit (orig(df4))
    10 loops, best of 3: 59.2 ms per loop
    

    计时代码:

    myList=["b","c","d"] * 100
    df = pd.DataFrame({"a":["computer", "printer"]})
    print(df)
    df = pd.concat([df]*10000).reset_index(drop=True)
    df3 = df.copy()
    df4 = df.copy()
    
    df1= pd.concat([df,pd.DataFrame(columns=myList)], axis=1).fillna(0)
    
    df2 = pd.concat([df3,pd.DataFrame(columns=myList, index=df.index, data=0)], axis=1)
    
    print(df1)
    print(df2)
    
    def orig(df):
        for col in range(300):
            df[col] = 0
        return df
    
    print (orig(df4))
    

    【讨论】:

      【解决方案2】:

      concat 为大型 dfs 提供一个空 df 而不是增量添加新列会更高效,因为这将增量增长 df 而不是仅对最终 df 维度进行单个分配:

      In [116]:
      myList=["b","c","d"]
      df = pd.concat([df,pd.DataFrame(columns=myList)], axis=1).fillna(0)
      df
      
      Out[116]:
                a  b  c  d
      0  computer  0  0  0
      1   printer  0  0  0
      

      【讨论】:

      • 嗯,我认为concat 解决方案更快,但不是。很有趣。
      • @jezrael 这也很令人惊讶,我希望在这里逐渐增加 df 会表现不佳
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 2023-01-14
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2020-12-27
      相关资源
      最近更新 更多