【问题标题】:Extracting values from a Python Dataframe从 Python 数据框中提取值
【发布时间】:2018-07-26 07:11:27
【问题描述】:

我有下面的 pandas 对象,我试图从中提取与每个键对应的值。

{'attributes': {'type': 'Contact', 'url': '/services/data/v38.0/sobjects/Contact/0035B00000KRMhZQAX'}, 'Id': '0035B00000KRMhZQAX', 'Name': 'abc xyz', 'Id': 'hello00'}

预期输出:

Id : 0035B00000KRMhZQAX
Name : abc xyz
CustId : hello00

编辑的输入值:

{'attributes': {'type': 'Contact', 'url': '/services/data/v38.0/sobjects/Contact/0035B00000KRMhZQAX'}, 'Id': '0035B00000KRMhZQAX', 'Name': 'abc xyz', 'CustId': 'hello00'}

【问题讨论】:

  • @Nihal,更新了我原始消息中的字典
  • 什么是 print df.head().to_dict() ?有多个Id ?
  • @jezrael,我得到以下输出 {'col': {0: {'attributes': {'type': 'Contact', 'url': '/services/data/v38. 0/sobjects/Contact/0035B00000KRMhZQAX'},'Id':'0035B00000KRMhZQAX','名称':'abc xyz','Id':'hello00'}}}
  • @jezrael,目前我在这个对象中只有一个条目,因此只返回一个 id..
  • 我认为'Id': '0035B00000KRMhZQAX','Id': 'hello00'

标签: python pandas


【解决方案1】:

用途:

df = pd.DataFrame( {'col': {0: {'attributes': {'type': 'Contact', 'url': '/services/data/v38.0/sobjects/Contact/0035B00000KRMhZQAX'},
                                'Id': '0035B00000KRMhZQAX', 'Name': 'abc xyz', 'CustId': 'hello00'}}} )
df.loc[1, 'col'] = 10
df.loc[2, 'col'] = np.nan

print (df)
                                                 col
0  {'attributes': {'type': 'Contact', 'url': '/se...
1                                                 10
2                                                NaN

首先使用字典过滤值:

df = df[df['col'].apply(lambda x: isinstance(x, dict))]
print (df)
                                                 col
0  {'attributes': {'type': 'Contact', 'url': '/se...

key提取,如果key不存在添加None:

df1 = pd.DataFrame([(x.get('Id', None), x.get('Name', None), x.get('CustId', None)) 
                    for x in df['col']], columns=['Id','Name','CustId'])
print (df1)
                   Id     Name   CustId
0  0035B00000KRMhZQAX  abc xyz  hello00

【讨论】:

  • 谢谢,这又引发了另一个错误“TypeError: 'int' object is not subscriptable”
  • @darkhorse - 如果仍然有错误,则表示在某些行中的某些内容与此字典不同。可以查一下吗?
  • 如前所述更新。但是,这会引发错误“AttributeError:'int' object has no attribute 'get'”
  • @darkhorse - 真实数据是否保密?
  • 是的,有一些机密数据。通过执行以下操作,我能够解决这个问题:df_new = pd.DataFrame(Contact).drop('attributes', axis= 1, inplace=False).. 一如既往地感谢您的帮助..
猜你喜欢
  • 2016-09-04
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多