我正在使用python,我有一个文件(data.json),其中包含多个json,但整个json都不是json。
所以文件看起来像这样:
{ "_id" : 01, ..., "path" : "2017-12-12" }
{ "_id" : 02, ..., "path" : "2017-1-12" }
{ "_id" : 03, ..., "path" : "2017-5-12" }
在<代码>处
大约还有30多个键,其中一些键有嵌套的json(所以我的观点是上面的每个json都很长)。
因此,上面这个单个文件中的每个块都是json,但整个文件不是json,因为它们没有用逗号等分隔。
如何使用pandas或simple python分别阅读这些JSON?
我试过这个:
import pandas as pd
df = pd.read_json('~/Desktop/data.json', lines=True)
它实际上创建了一个数据帧,其中每一行大约是一个json,但它也为json的每个(第一级)键创建了一列,这使得事情变得有点混乱,而不是将整个json直接放在一个单元格中。
更清楚地说,我希望我的输出在“熊猫”数据框架(或另一种合理的数据结构)中是这样的:
jsons
0 { "_id" : 01, ..., "path" : "2017-12-12" }
1 { "_id" : 02, ..., "path" : "2017-1-12" }
2 { "_id" : 03, ..., "path" : "2017-5-12" }
由于文件本身不是json,所以我将逐行读取它,因为该行是字符串格式,所以我将使用yaml将其转换为dict类型,然后最后我将在数据框中追加它
import yaml
import pandas as pd
f = open('data.json')
line = f.readline()
df = pd.DataFrame()
while line:
#string line to dict
d = yaml.load(line)
#temp dataframe
df1=pd.DataFrame(d,index=[0])
#append in every iteration
df=df.append(df1, ignore_index=True)
line = f.readline()
f.close()
print(df)
#output
_id path
0 01 2017-12-12
1 02 2017-1-12
2 03 2017-5-12
想法是使用数据中不存在分隔符的读取csv,然后将列的每个值转换为字典:
import pandas as pd
import ast, json
from io import StringIO
temp=u"""{ "_id" : 1, "path" : "2017-12-12" }
{ "_id" : 2, "path" : "2017-1-12" }
{ "_id" : 3, "path" : "2017-5-12" }"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep="|", names=['data'])
print (df)
#jsons
df['data'] = df['data'].apply(json.loads)
#dictionaries
#df['data'] = df['data'].apply(ast.literal_eval)
print (df)
data
0 {'_id': 1, 'path': '2017-12-12'}
1 {'_id': 2, 'path': '2017-1-12'}
2 {'_id': 3, 'path': '2017-5-12'}
问题内容: 我想知道如何从单个文件夹中读取多个文件(无需指定文件名,只是它们是json文件)。 另外,有可能将它们转换为DataFrame吗? 能给我一个基本的例子吗? 问题答案: 一种选择是使用os.listdir列出目录中的所有文件,然后仅查找以’.json’结尾的文件: 现在,您可以使用pandas DataFrame.from_dict将json(此时为python字典)读入pandas数
问题内容: 我对Json文件很陌生。如果我有一个包含多个json对象的json文件,例如: 我想将所有“时间戳记”和“有用性”提取到一个数据帧中: 有谁知道解决此类问题的一般方法? 问题答案: 使用json数组,格式为: 然后将其导入到您的python代码中 现在,数据的内容是一个带有字典的数组,字典表示每个元素。 您可以轻松访问它,即:
我需要将对象保存在一个文件中。我使用GSON库。写入文件很容易,但是读取很复杂。我一个接一个地读取整个文件,但是这个解决方案效率很低。如何只读取一个JSON字符串?我不知道如何做得更好。请帮帮我。谢谢你
我一直在努力阅读java项目中的文本文件,我一整天都在寻找解决方案,我尝试了很多方法,但没有一个有效。其中一些:(另外,我必须使用文件和扫描程序类) 异常线程"main"java.nio.file.NoSuchFileExc0019: test\fileTest.txt 异常线程"main"java.lang.NullPointerExc0019 线程“main”java中出现异常。木卫一。Fil
我在on文件夹的几个zip文件中有几个csv文件,例如: null zip中的一个csv是这样工作的: 你知道如何优化这个循环吗?
问题内容: 只是因为一个简单,易于表达的陈述使我的脸上有些错误,所以我有点头疼。 我有一个名为strings.json的json文件,如下所示: 我现在想读取json文件。我发现了以下这些语句,但是不起作用: 控制台上显示的错误是这样的: 已编辑 从更改为 并得到了这个: 问题答案: 该方法(“ load”中没有“ s”)可以直接读取文件: 您正在使用方法,该方法仅用于 字符串 参数。 编辑:新消