如何在pandas中的列表后创建许多列?

时间:2016-07-27 12:51:10

标签: python pandas dataframe append multiple-columns

我有一个数据框,我想在列表后创建很多新列并填充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

我该怎么做?

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:1)

对于大型dfs来说,concat空df的性能更高,而不是逐步添加新列,因为这会逐渐增加df,而不是仅仅对最终df维度进行单一分配:< / p>

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