如何在 pandas 中的列表后创建多个列?
How can I create many columns after a list in pandas?
我有一个数据框,我想在列表后创建很多新列并填充 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
我该怎么做?
使用最快的解决方案:
for col in myList:
df[col] = 0
print(df)
a b c d
0 computer 0 0 0
1 printer 0 0 0
另一个解决方案是使用 concat
with DataFrame
构造函数:
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))
对于大型 df,concat
一个空 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
我有一个数据框,我想在列表后创建很多新列并填充 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
我该怎么做?
使用最快的解决方案:
for col in myList:
df[col] = 0
print(df)
a b c d
0 computer 0 0 0
1 printer 0 0 0
另一个解决方案是使用 concat
with DataFrame
构造函数:
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))
对于大型 df,concat
一个空 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