将 JSON (tweepy) 中的数据解析为 pandas 数据帧
Parsing data from JSON (tweepy) into a pandas dataframe
我已经从 Tweepy 流式传输推文并将其存储为文本文件,as such。现在我想将其转换为 pandas 数据框,但我不知道如何操作。我已经尝试在 Stack Overflow 和 pandas 文档中寻找类似的帖子,但我仍然不确定我将如何开始解析所有这些数据。
答案:通过将 json 文件转换为列表然后能够将其转换为数据框来解决此问题。谢谢大家的帮助。
tweets = []
for line in open('tweets.txt', 'r'):
tweets.append(json.loads(line))
df = pd.DataFrame(tweets)
您不必将文本文件转换为 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)
我已经从 Tweepy 流式传输推文并将其存储为文本文件,as such。现在我想将其转换为 pandas 数据框,但我不知道如何操作。我已经尝试在 Stack Overflow 和 pandas 文档中寻找类似的帖子,但我仍然不确定我将如何开始解析所有这些数据。
答案:通过将 json 文件转换为列表然后能够将其转换为数据框来解决此问题。谢谢大家的帮助。
tweets = []
for line in open('tweets.txt', 'r'):
tweets.append(json.loads(line))
df = pd.DataFrame(tweets)
您不必将文本文件转换为 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)