Python 将JSON转换为数据帧
我在这方面遇到了一些麻烦。 我正在尝试将此JSON写入DataFrame。我觉得我的问题是如何格式化JSON。当我写每条推文时。然而,我们无法缩小范围。任何洞察都会很棒。附件是我的raw_tweets.json,下面第二段代码是我如何编写的,用逗号分隔,即join(“,”) 这是最新的 #JSON到数据帧Python 将JSON转换为数据帧,python,json,pandas,dataframe,Python,Json,Pandas,Dataframe,我在这方面遇到了一些麻烦。 我正在尝试将此JSON写入DataFrame。我觉得我的问题是如何格式化JSON。当我写每条推文时。然而,我们无法缩小范围。任何洞察都会很棒。附件是我的raw_tweets.json,下面第二段代码是我如何编写的,用逗号分隔,即join(“,”) 这是最新的 #JSON到数据帧 class tweet2dframe(object): def __init__(self, text="", location=""): self.text = text
class tweet2dframe(object):
def __init__(self, text="", location=""):
self.text = text
self.location = location
def getText(self):
return self.text
def getLocation(self):
return self.location
# import json package to load json file
with open('raw_tweets.json',encoding="utf8") as jsonFile:
polls_json = json.loads(jsonFile.read())
tweets_list = [polls(i["location"], i["text"]) for i in polls_json['text']]
colNames = ("Text", "location")
dict_list = []
for i in tweets_list:
dict_list.append(dict(zip(colNames , [i.getText(), i.getLocation()])))
tweets_df = pd.DataFrame(dict_list)
tweets_df.head()
我将推文写入JSON的方式
saveFile = io.open('raw_tweets.json', 'w', encoding='utf-8')
saveFile.write(','.join(self.tweet_data))
saveFile.close()
exit()
raw_tweets.json
包含无效的json。它包含由逗号分隔的JSON片段。要使全文有效,请将括号置于括号中[…]
围绕内容:
with open('raw_tweets.json', encoding="utf8") as jsonFile:
polls_json = json.loads('[{}]'.format(jsonFile.read()))
比如说,
import pandas as pd
import json
with open('raw_tweets.json', encoding="utf8") as jsonFile:
polls_json = json.loads('[{}]'.format(jsonFile.read()))
tweets_list = [(dct['user']['location'], dct["text"]) for dct in polls_json]
colNames = ("location", "text")
tweets_df = pd.DataFrame(tweets_list, columns=colNames)
print(tweets_df.head())
屈服
location text
0 None RT @webseriestoday: Democracy Now: Noam Chomsk...
1 Pittsburgh PA "The tuxedo was an invention of the Koch broth...
2 None RT @webseriestoday: Democracy Now: Noam Chomsk...
3 None RT @webseriestoday: Democracy Now: Noam Chomsk...
另一个更好的解决问题的方法是在
raw\u tweets.JSON
中编写有效的JSON。毕竟,如果您想将该文件发送给其他人,那么如果该文件包含有效的JSON,您将使他们的生活更轻松。我们需要查看更多的代码,以明确建议如何修复它,但一般来说,您希望使用将DICT列表作为JSON写入文件,而不是使用saveFile.write(','.join(self.tweet_data))“手动”写入JSON片段。
:
如果raw_tweets.json
包含有效的json,则可以使用以下命令将其加载到DICT的Python列表中:
with open('raw_tweets.json', encoding="utf8") as jsonFile:
polls_json = json.load(jsonFile)
代码的其余部分将保持不变,以便将所需的部分加载到数据帧中
这行代码是如何构造的: 在一次交互式Python会话中,我检查了
polls\u json
中的一个dict:
In [114]: import pandas as pd
In [115]: import json
In [116]: with open('raw_tweets.json', encoding="utf8") as jsonFile:
polls_json = json.loads('[{}]'.format(jsonFile.read()))
In [117]: dct = polls_json[1]
In [118]: dct
Out[118]:
{'contributors': None,
'coordinates': None,
...
'text': "Like the old Soviet leaders, Bernie refused to wear a tux at last night's black-tie dinner.",
'truncated': False,
'user': {'contributors_enabled': False,
...
'location': 'Washington DC',}}
它相当大,所以我在这里省略了部分内容,以使结果更具可读性。
假设我正确猜测了您要查找的文本
和位置
值,
我们可以看到,给定这个dict,dct
,我们可以使用dct['text']
访问所需的text
值。但是location'
键在嵌套的dict中,dct['user']
。因此,我们需要使用dct['user']['location']
来提取位置值
顺便说一句,Pandas提供了一种将JSON读入数据帧的方便方法,pd.read_JSON
,但它依赖于JSON数据是“平坦的”。因为我们需要的数据是嵌套的dict,所以我使用了自定义代码,列表
tweets_list = [(dct['user']['location'], dct["text"]) for dct in polls_json]
要提取值而不是pd.read_json
raw_tweets.json
包含无效的json。它包含由逗号分隔的JSON片段。要使全文有效,请将括号置于括号中[…]
围绕内容:
with open('raw_tweets.json', encoding="utf8") as jsonFile:
polls_json = json.loads('[{}]'.format(jsonFile.read()))
比如说,
import pandas as pd
import json
with open('raw_tweets.json', encoding="utf8") as jsonFile:
polls_json = json.loads('[{}]'.format(jsonFile.read()))
tweets_list = [(dct['user']['location'], dct["text"]) for dct in polls_json]
colNames = ("location", "text")
tweets_df = pd.DataFrame(tweets_list, columns=colNames)
print(tweets_df.head())
屈服
location text
0 None RT @webseriestoday: Democracy Now: Noam Chomsk...
1 Pittsburgh PA "The tuxedo was an invention of the Koch broth...
2 None RT @webseriestoday: Democracy Now: Noam Chomsk...
3 None RT @webseriestoday: Democracy Now: Noam Chomsk...
另一个更好的解决问题的方法是在
raw\u tweets.JSON
中编写有效的JSON。毕竟,如果您想将该文件发送给其他人,那么如果该文件包含有效的JSON,您将使他们的生活更轻松。我们需要查看更多的代码,以明确建议如何修复它,但一般来说,您希望使用将DICT列表作为JSON写入文件,而不是使用saveFile.write(','.join(self.tweet_data))“手动”写入JSON片段。
:
如果raw_tweets.json
包含有效的json,则可以使用以下命令将其加载到DICT的Python列表中:
with open('raw_tweets.json', encoding="utf8") as jsonFile:
polls_json = json.load(jsonFile)
代码的其余部分将保持不变,以便将所需的部分加载到数据帧中
这行代码是如何构造的: 在一次交互式Python会话中,我检查了
polls\u json
中的一个dict:
In [114]: import pandas as pd
In [115]: import json
In [116]: with open('raw_tweets.json', encoding="utf8") as jsonFile:
polls_json = json.loads('[{}]'.format(jsonFile.read()))
In [117]: dct = polls_json[1]
In [118]: dct
Out[118]:
{'contributors': None,
'coordinates': None,
...
'text': "Like the old Soviet leaders, Bernie refused to wear a tux at last night's black-tie dinner.",
'truncated': False,
'user': {'contributors_enabled': False,
...
'location': 'Washington DC',}}
它相当大,所以我在这里省略了部分内容,以使结果更具可读性。
假设我正确猜测了您要查找的文本
和位置
值,
我们可以看到,给定这个dict,dct
,我们可以使用dct['text']
访问所需的text
值。但是location'
键在嵌套的dict中,dct['user']
。因此,我们需要使用dct['user']['location']
来提取位置值
顺便说一句,Pandas提供了一种将JSON读入数据帧的方便方法,pd.read_JSON
,但它依赖于JSON数据是“平坦的”。因为我们需要的数据是嵌套的dict,所以我使用了自定义代码,列表
tweets_list = [(dct['user']['location'], dct["text"]) for dct in polls_json]
要提取值而不是pd.read_json哇,这太棒了,请验证数据框中的文本和位置标签是否正确,我编辑了它们,但请验证您能否解释这一行?tweets_list=[(dct['user']['location'],dct[“text”])用于民调中的dct_json]我有点困惑,为什么“user”被包括在内,为什么引用中的位置和文本是我在StackOverflow上写过的最好的帖子,非常清楚,谢谢!hi@unutbu,我得到了一个错误:文件“C:/Users/DS/tweet_extraction.py”,第63行,tweets_list=[(dct['user']['location'],dct['text]])用于投票中的dct_json]类型错误:列表索引必须是整数或切片,不是str这个错误意味着
dct
是一个列表而不是一个dict。你是用polls\u json=json.loads(“[{}]'.format(jsonFile.read())
定义了raw\u tweets.json
还是用json.dump(tweets,saveFile)
修复了,请验证数据框中的文本和位置标签是否正确,我编辑了它们,但请验证。请您解释一下这一行?tweets_list=[(dct['user']['location'],dct[“text”])用于民调中的dct_json]我有点困惑,为什么“user”被包括在内,为什么引用中的位置和文本是我在StackOverflow上写过的最好的帖子,非常清楚,谢谢!hi@unutbu,我得到了一个错误:文件“C:/Users/DS/tweet_extraction.py”,第63行,tweets_list=[(dct['user']['location'],dct[“text”])用于轮询中的dct_json]类型错误:列表索引必须是整数或切片,而不是标准。错误意味着dct
是一个列表而不是一个dict。您是否定义了polls\u jso