将字典添加到数据帧的最佳方法

时间:2018-04-13 13:02:39

标签: python pandas

我有一个Pandas Dataframe,想要将字典中的数据统一添加到我的数据帧中的所有行。目前我循环遍历字典并将值设置为我的新列。有没有更有效的方法来做到这一点?

notebook

# 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

2 个答案:

答案 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)
相关问题