访问Pandas Dataframe 中的dict值

tyg4sfes  于 2022-12-09  发布在  其他
关注(0)|答案(3)|浏览(171)

我有一个如下所示的 Dataframe df,其中包含一列事件-

|events|
|{'id': 109421132110384, 'created_at': datetime.datetime(2022, 11, 28, 11, 12, 50, tzinfo=tzutc()), 'in_reply_to_id': None, 'in_reply_to_account_id': None, 'sensitive': False, 'spoiler_text': '', 'visibility': 'public', 'language': 'en', 'uri': 'https://users/statuses/10942113190455'}|
|{'id': 109421132340384, 'created_at': datetime.datetime(2022, 11, 30, 11, 12, 50, tzinfo=tzutc()), 'in_reply_to_id': None, 'in_reply_to_account_id': None, 'sensitive': False, 'spoiler_text': '', 'visibility': 'public', 'language': 'en', 'uri': 'https://users/statuses/10942113190467'}|

我试过低于approoch-

a= df['events'][0]
print(a['id'])

获取错误:TypeError:字符串索引必须为整数
返回的数据类型-

print(type(df['events'][0])) 
<class 'str'>
print(type(df['events']))
<class 'pandas.core.series.Series'>
print(type(df))
<class 'pandas.core.frame.DataFrame'>

我想访问id,created_at,in_reply_to_id,它们位于相同 Dataframe 的新列中,用于每个相应的记录。
请帮忙,先谢谢了。

dgjrabp2

dgjrabp21#

你可以试试这个。
通过loc()方法访问第一个元素。
然后访问event列,最后访问dict的id键。

df.loc[0]["events"]["id"]  # 109421132110384
3yhwsihp

3yhwsihp2#

您可以使用.iloc()来存取数据列,然后指定数据行名称:

import datetime
from dateutil.tz import tzutc
import pandas as pd

df = pd.DataFrame({"events": [
    {'id': 109421132110384, 'created_at': datetime.datetime(2022, 11, 28, 11, 12, 50, tzinfo=tzutc()), 'in_reply_to_id': None, 'in_reply_to_account_id': None, 'sensitive': False, 'spoiler_text': '', 'visibility': 'public', 'language': 'en', 'uri': 'https://users/statuses/10942113190455'},
    {'id': 109421132340384, 'created_at': datetime.datetime(2022, 11, 30, 11, 12, 50, tzinfo=tzutc()), 'in_reply_to_id': None, 'in_reply_to_account_id': None, 'sensitive': False, 'spoiler_text': '', 'visibility': 'public', 'language': 'en', 'uri': 'https://users/statuses/10942113190467'}
]})

print(df.iloc[0]["events"])

输出量:

{'id': 109421132110384,
 'created_at': datetime.datetime(2022, 11, 28, 11, 12, 50, tzinfo=tzutc()),
 'in_reply_to_id': None,
 'in_reply_to_account_id': None,
 'sensitive': False,
 'spoiler_text': '',
 'visibility': 'public',
 'language': 'en',
 'uri': 'https://users/statuses/10942113190455'}
ru9i0ody

ru9i0ody3#

您的“事件”列是字典的打印表示形式,而不是字典。
一个丑陋的解决方案是Mapeval来创建一个新列。确保首先导入datetime。

df['parsed_events'] = df['events'].map(eval)

解析后,您可以将内容视为字典。最好是重新访问原始数据是如何生成的。
下面是一个示例...

import datetime
from dateutil.tz import tzutc

string = "{'id': 109421132110384, 'created_at': datetime.datetime(2022, 11, 28, 11, 12, 50, tzinfo=tzutc()), 'in_reply_to_id': None, 'in_reply_to_account_id': None, 'sensitive': False, 'spoiler_text': '', 'visibility': 'public', 'language': 'en', 'uri': 'https://users/statuses/10942113190455'}" 

eval(string)

生成字典...

{'id': 109421132110384,
 'created_at': datetime.datetime(2022, 11, 28, 11, 12, 50, tzinfo=tzutc()),
 'in_reply_to_id': None,
 'in_reply_to_account_id': None,
 'sensitive': False,
 'spoiler_text': '',
 'visibility': 'public',
 'language': 'en',
 'uri': 'https://users/statuses/10942113190455'}

相关问题