将数据从JSON(tweepy)解析到pandas数据框

rlcwz9us  于 2023-03-24  发布在  其他
关注(0)|答案(2)|浏览(128)

我已经从Tweepy流推并将其存储为文本文件as such。现在我想将其转换为pandas Dataframe ,但我不知道如何。我已经尝试在Stack Overflow和pandas文档中寻找类似的帖子,但我仍然不确定如何开始解析所有这些数据。
回答:通过将json文件转换为列表,然后将其转换为 Dataframe ,解决了这个问题。感谢所有帮助我们的人。

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

    df = pd.DataFrame(tweets)
djmepvbi

djmepvbi1#

你不需要将你的文本文件转换成json来读取它作为pandas dataframe,只需要做:

pd.read_json('yourfile.txt')

它应该可以工作。这假设你的格式是:
{"name": "first json"}
而不是:
{"name": "first json"}{"name": "second json"}
然而,如果你有第二种格式,那么你可以只是任何这些方法(有很多):
遍历文件**-〉跟踪开括号-〉创建json对象-〉将它们附加到列表-〉**将列表输入pandas。

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

或者使用split并添加删除的括号:

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)
bfrts1fy

bfrts1fy2#

如果你的json文件(yourfile.txt)中有多条tweet,并且你想把它们都读入你的 Dataframe :

df = pd.read_json('yourfile.txt', lines=True)

相关问题