Python 将包含多个json对象的tweet json文件加载到dataframe中
我有一个JSON文件(Python 将包含多个json对象的tweet json文件加载到dataframe中,python,json,pandas,twitter,nested,Python,Json,Pandas,Twitter,Nested,我有一个JSON文件(tweetObject.JSON),其中包含约600行,每行都是来自Twitter API的响应,其中包含大约100条tweet及其元数据 我的问题: 如何从我的JSON文件中提取特定的tweet属性,例如,username?(我在考虑将JSON加载到pandas dataframe中,每个列只存储一个属性/字段,然后选择我需要的特定属性。但我也愿意接受任何其他解决方案 如何将JSON文件加载到熊猫数据帧中?我使用了JSON.load,但是我得到了jsondecoderro
tweetObject.JSON
),其中包含约600行,每行都是来自Twitter API的响应,其中包含大约100条tweet及其元数据
我的问题:
username
?(我在考虑将JSON加载到pandas dataframe中,每个列只存储一个属性/字段,然后选择我需要的特定属性。但我也愿意接受任何其他解决方案JSON.load
,但是我得到了jsondecoderror:Extra data:line 2 column 1(char 173419)
。经过一些研究,我发现这个错误的原因可能是因为JSON.load
没有解码多个JSON对象JSON.load
,但仍然得到了相同的错误with open('tweetObject_v2.json') as json_file:
data_list = json.load(json_file)
很抱歉,我没有编写tweet对象JSON的示例,因为此文件的一行太长。但您可以在此处找到示例Twitter API(v2)响应:如果您可以读取展开文件的每一行,然后加载到JSON中,您可以执行以下操作:
data = example line above in your questions
dataj = json.loads(data)
dataj['author']['username']
输出
'Megresistor'
如果您能够构建一个数据框,并且该数据框具有用户列(应该是一个字典),那么您可以使用它来提取屏幕名称
df.user.str.get('screen_name')
这将获得用户提及的第一个屏幕名称。用户提及是一个列表,因此这是列表的第一个元素。当有列表时,获取所有内容有点复杂,但至少您可以感觉到如何导航数据帧
df.entities.str.get('user_mentions').str[0].str.get('screen_name')
好的,我终于明白了。希望它能帮助其他有类似问题的人 问题2的答案:如何将包含多个json对象的json文件加载到dataframe中? 由于
json.loads
不解码多个json对象,因此我循环遍历行并逐行加载,并将结果存储在数组中。接下来,我将数组转换为数据帧:
tweets = []
for line in open('tweetsFlatten.json', 'r'):
tweets.append(json.loads(line))
df1 = pd.DataFrame(tweets)
检查df1的列,我发现有些列包含数组或对象(即每个属性没有单独的列)。例如,author
列保留了author对象,其中包括id(用户id)、用户名等
问题1的答案:如何提取/访问tweet JSON文件中的特定tweet属性?
为了能够访问特定属性(例如,username
),我使用了json\u normalize
:
df_new = json_normalize(tweets)
df_new.columns
#df_new is a new df where each arrtibute has a separate column.
#For example, instead of an `author` column which kept various attributes (id, username, etc.), the new dataframe has separate columns for each of them (e.g., `author.id`, `author.username`, etc.
df_new['author.username'].head()
注意事项:
- 我使用了twitterapiv2,因此响应JSON文件位于
- 我使用了json文件的扁平版本,因为我发现它更容易使用(例如,访问特定属性)
json\u normalize
。当我检查列时,发现一些列包含数组或对象。因此,我决定对Flatte\u json文件重复相同的步骤。幸运的是,这给了我一个数据帧,每个属性都有一个单独的列ute(包括用户名:)在我的答案中添加了几个数据帧提取示例