【问题标题】:Parsing data from JSON (tweepy) into a pandas dataframe将 JSON (tweepy) 中的数据解析为 pandas 数据帧
【发布时间】:2020-03-24 11:15:05
【问题描述】:

我已从 Tweepy 流式传输推文并将其存储为文本文件 as such。现在我希望将其转换为熊猫数据框,但我不知道如何。我已经尝试在 Stack Overflow 和 pandas 文档中寻找类似的帖子,但我仍然不确定如何开始解析所有这些数据。

答案:通过将 json 文件转换为列表然后能够将其转换为数据框来解决此问题。感谢所有帮助过的人。

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

    df = pd.DataFrame(tweets)

【问题讨论】:

  • 我无法判断数据一旦读入 pandas 是否有意义。但是,@chargeupfor 的建议似乎确实有效。

标签: python json pandas tweepy


【解决方案1】:

您无需将文本文件转换为 json 即可将其作为 pandas 数据框读取,只需这样做:

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

或者像这样使用拆分并添加删除的括号:

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)

【讨论】:

  • 我收到一个尾随数据错误。有什么建议吗?
  • 嘿,是的,所以我猜你在阅读多条推文时可能会得到这个,对吧?因为这在单个 JSON 对象上应该不是问题。如果是这样,您需要将它们转换为 json 对象列表,例如 data = [{"tweet": "the first tweet"}, {"tweet": "the second tweet}],然后执行 df = pd.DataFrame(data)。导致问题的原因是,现在您的推文是背靠背的,没有分隔符 {"tweet": "the first tweet"}{"tweet": "the second tweet}
  • 谢谢。我的文件中有大量推文-您将如何转换为列表?
  • @PhilipLiu o,没有看到您更新了问题,我想您不需要我更新的答案 XDD 但很高兴我能提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多