Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将包含多个json对象的tweet json文件加载到dataframe中_Python_Json_Pandas_Twitter_Nested - Fatal编程技术网

Python 将包含多个json对象的tweet json文件加载到dataframe中

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

我有一个JSON文件(
tweetObject.JSON
),其中包含约600行,每行都是来自Twitter API的响应,其中包含大约100条tweet及其元数据

我的问题:

  • 如何从我的JSON文件中提取特定的tweet属性,例如,
    username
    ?(我在考虑将JSON加载到pandas dataframe中,每个列只存储一个属性/字段,然后选择我需要的特定属性。但我也愿意接受任何其他解决方案
  • 如何将JSON文件加载到熊猫数据帧中?我使用了
    JSON.load
    ,但是我得到了
    jsondecoderror:Extra data:line 2 column 1(char 173419)
    。经过一些研究,我发现这个错误的原因可能是因为
    JSON.load
    没有解码多个JSON对象
  • 我还有一个JSON文件的扁平版本,每行保留一条tweet。我还尝试了
    JSON.load
    ,但仍然得到了相同的错误
  • 下面是我加载json的代码:

    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文件中的数据吗?我只是在问题中发布了我的更新代码。是的,如果你能够访问每一行并进行循环,你可以将用户名解析成一个列表。不清楚你的数据是什么样的,因此很难给你更详细的答案。是n这是一种将其导入pandas的方法。由于twitter响应非常复杂,我为特定操作编写了解析脚本。您可能希望尝试展平json而不是json。我已经将其用于其他复杂的json结构。您可以发布到文本文件的链接吗谢谢Johnathan的更新。我真的弄明白了。我读了每一行并循环了几行(我加载了每一行并将其放入数组)。然后,我将数组转换为pandas数据帧,最后,我在生成的数据帧上使用了
    json\u normalize
    。当我检查列时,发现一些列包含数组或对象。因此,我决定对Flatte\u json文件重复相同的步骤。幸运的是,这给了我一个数据帧,每个属性都有一个单独的列ute(包括用户名:)在我的答案中添加了几个数据帧提取示例