Python 如何从OrderedPicts数组中提取值?

Python 如何从OrderedPicts数组中提取值?,python,pandas,Python,Pandas,如果我有一个csv文件行,其中一列包含ordereddict,那么如何创建一个新列,并使用python(3.+)/pandas(.18)提取每个ordereddict的单个元素 这里有一个例子。我的列,attributes,在ordereddicts中隐藏了billingPostalCodes。我所关心的就是用billingPostalCodes创建一个列 下面是我的数据现在的样子: import pandas as pd from datetime import datetime imp

如果我有一个csv文件行,其中一列包含ordereddict,那么如何创建一个新列,并使用python(3.+)/pandas(.18)提取每个ordereddict的单个元素

这里有一个例子。我的列,
attributes
,在ordereddicts中隐藏了
billingPostalCodes
。我所关心的就是用
billingPostalCodes
创建一个列

下面是我的数据现在的样子:

 import pandas as pd
 from datetime import datetime
 import csv
 from collections import OrderedDict

 df = pd.read_csv('sf_account_sites.csv')
 print(df)
收益率:

 id    attributes  
  1    OrderedDict([(u'attributes', OrderedDict([(u'type', u'Account'), (u'url', u'/services/data/v29.0/sobjects/Account/001d000001tKZmWAAW')])), (u'BillingPostalCode', u'85020')])  
  2    OrderedDict([(u'attributes', OrderedDict([(u'type', u'Account'), (u'url', u'/services/data/v29.0/sobjects/Account/001d000001tKZmWAAW')])), (u'BillingPostalCode', u'55555')])
  ...
如果我这样做,我知道在个人层面上:

dict = OrderedDict([(u'attributes', OrderedDict([(u'type', u'Account'), (u'url', u'/services/data/v29.0/sobjects/Account/001d000001tKZmWAAW')])), (u'BillingPostalCode', u'85020')])

print(dict['BillingPostalCode'])
结果我会得到85020

我怎么才能让它看起来像这样

 id    zip_codes  
  1    85020
  2    55555
  ...
我必须使用应用功能吗?一个for循环?我已经尝试了很多不同的方法,但是在数据帧上我什么都做不到


提前感谢您,如果需要更具体的说明,请告诉我。

这花了我一段时间才解决,但问题通过执行以下操作得到解决:

df.apply(lambda row: row["attributes"]["BillingPostalCode"], axis = 1)
这里的技巧是要注意,
axis=1
强制
pandas
遍历每一行,而不是每一列(这是默认设置,如中所示)

DataFrame.apply(func,axis=0,broadcast=False,raw=False,reduce=None, args=(),**kwds)

沿数据帧的输入轴应用函数

传递给函数的对象是具有以下索引的系列对象: 数据帧的索引(轴=0)或列(轴=1)。返回类型 取决于传递的函数是聚合还是reduce参数 如果数据帧为空

参数:

  • func:应用于每列/每行的函数
  • 轴:{0或'index',1或'columns'},默认为0
    • 0或“索引”:将函数应用于每列
    • 1或“列”:将函数应用于每一行
从那里,首先提取相关列(在本例中为
attributes
),然后从那里仅提取
BillingPostalCode


您需要格式化生成的数据框以获得正确的列名。

这看起来应该可以,但我在尝试此操作时遇到了
TypeError:(“字符串索引必须是整数”,“发生在索引0处”)
。你知道为什么会这样吗?@AndrewKraemer我用你引用的例子验证了这一点,效果很好。你用的是什么版本的熊猫?我在熊猫0.18上。我怀疑在旧版本的Pandas行索引中,这样的索引是使用整数,而不是列名。请尝试
第[1][“BillingPostalCode”]
行。我确实在.18上。我运行了你推荐的,得到了同样的问题。如果有帮助的话,我可以上传实际的数据集。属性列中的数据似乎保存为字符串,其中它需要是collections.OrderedDict才能工作。不知道如何将字符串转换为OderedDict。实际上,这是可行的!我在生产上试过了,我得到了结果!非常感谢你!