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

Rut*_*ste 6 python pandas

我有一个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
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 6

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
Run Code Online (Sandbox Code Playgroud)

如果可能数字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
Run Code Online (Sandbox Code Playgroud)


Ant*_*vBR 5

在我看来,答案是否定的。循环遍历字典中的键和值已经很有效,并且分配列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
Run Code Online (Sandbox Code Playgroud)

时间(但错误太大......我会说它们在速度上是相同的):

您的解决方案:

809 µs ± 70 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Run Code Online (Sandbox Code Playgroud)

df.assign():

893 µs ± 24.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Run Code Online (Sandbox Code Playgroud)