Python 将数据从JSON(tweepy)解析为数据帧

Python 将数据从JSON(tweepy)解析为数据帧,python,json,pandas,tweepy,Python,Json,Pandas,Tweepy,我已经将Tweepy的推文流式传输,并将其存储为文本文件。现在我想把它转换成熊猫数据帧,但我不知道如何转换。我曾尝试在这里和pandas文档中寻找类似的帖子,但我仍然不确定如何开始解析所有这些数据 答:通过将json文件转换为列表,然后将其转换为数据帧,解决了这个问题。谢谢所有帮助过我的人 tweets = [] for line in open('tweets.txt', 'r'): tweets.append(json.loads(line)) df

我已经将Tweepy的推文流式传输,并将其存储为文本文件。现在我想把它转换成熊猫数据帧,但我不知道如何转换。我曾尝试在这里和pandas文档中寻找类似的帖子,但我仍然不确定如何开始解析所有这些数据

答:通过将json文件转换为列表,然后将其转换为数据帧,解决了这个问题。谢谢所有帮助过我的人

    tweets = []
    for line in open('tweets.txt', 'r'):
       tweets.append(json.loads(line))

    df = pd.DataFrame(tweets)

您无需将文本文件转换为json即可将其作为数据帧读取,只需执行以下操作:

pd.read_json('yourfile.txt')
它应该会起作用。这假定您的格式为:

{“name”:“first json”}

而不是:

{“name”:“first json”}{“name”:“second json”}

但是,如果您有第二种格式,那么您可以只使用其中任何一种方法(还有很多):

遍历文件->跟踪开括号->在运行中创建json对象->将它们附加到列表中->将列表馈送到熊猫中

def parseMultipleJSON(lines):
    skip = prev = 0
    data = []
    lines = ''.join(lines)
    for idx, line in enumerate(lines):
        if line == "{":
            skip += 1
        elif line == "}":
            skip -= 1
            if skip == 0:
                json_string = ''.join(lines[prev:idx+1])
                data.append(json.loads(json_string))
                prev = idx+1
    return data
或使用拆分,并添加已移除的括号:

def parseMultipleJSON2(lines):
    lines = ''.join(lines).split('}{')
    data = []
    for line in lines:
        if line.endswith('}') == False:
            line += '}'
        if line.startswith('{') == False:
            line = '{%s' % line
        data.append(json.loads(line))
    return data
这与第二个解决方案相同,但缩写为:

def parseMultipleJSON3(lines):
    lines = ''.join(lines).split('}{')
    data = [json.loads('%s}' % line) if idx == 0 else json.loads('{%s' % line) if idx == len(lines)-1 else json.loads('{%s}' % line) for idx, line in enumerate(lines)]
    return data
然后,您可以调用任何您想要选择的:

import pandas as pd
import json

with open('yourfile.txt','r') as json_file:
    lines = json_file.readlines()
    lines = [line.strip("\n") for line in lines]
    #data = parseMultipleJSON(lines)
    #data = parseMultipleJSON2(lines)
    data = parseMultipleJSON3(lines)

df = pd.DataFrame(data)

一旦读到熊猫,我就说不出这些数据是否有意义。然而,@chargingupfor的建议似乎确实有效。我得到了一个跟踪数据错误。有什么建议吗?嘿,是的,所以我猜你可能在阅读多条推文时得到了这个,对吗?因为这在单个JSON对象上不应该是问题。如果是这样,您需要将它们转换为json对象列表,例如
data=[{“tweet”:“第一条tweet”},{“tweet”:“第二条tweet}]
,然后执行
df=pd.DataFrame(data)
。导致问题的是,现在您的tweet没有分隔符
{“tweet”:“第一条tweet”}{“tweet”:“第二条tweet}
。谢谢。我的文件中有大量推文-你将如何转换为列表?@PhilipLiu o,没有看到你更新了这个问题,我想你不需要我的更新答案XDD,但很高兴我能帮助你。