我有一个Pandas Dataframe,想要将字典中的数据统一添加到我的数据帧中的所有行。目前我循环遍历字典并将值设置为我的新列。有没有更有效的方法来做到这一点?
# coding: utf-8
import pandas as pd
df = pd.DataFrame({'age' : [1, 2, 3],'name' : ['Foo', 'Bar', 'Barbie']})
d = {"blah":42,"blah-blah":"bar"}
for k,v in d.items():
df[k] = v
df
答案 0 :(得分:5)
如果所有密钥都不是数字,请使用assign
:
df = df.assign(**d)
print (df)
age name blah blah-blah
0 1 Foo 42 bar
1 2 Bar 42 bar
2 3 Barbie 42 bar
如果可能,数字join
工作得很好:
d = {8:42,"blah-blah":"bar"}
df = df.join(pd.DataFrame(d, index=df.index))
print (df)
age name 8 blah-blah
0 1 Foo 42 bar
1 2 Bar 42 bar
2 3 Barbie 42 bar
答案 1 :(得分:2)
我认为答案是不。通过键循环,dict中的值已经很有效,并且赋值df[k] = v
的列更具可读性。请记住,将来你只想记住为什么你做了什么,如果你节省了几微秒,你就不会在意。唯一缺少的是评论你为什么这样做。
d = {"blah":42,"blah-blah":"bar"}
# Add columns to compensate for missing values in document XXX
for k,v in d.items():
df[k] = v
计时(但错误太大了......我说他们的速度相当):
您的解决方案:
809 µs ± 70 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
df.assign():
893 µs ± 24.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)