我写了一个python脚本,该脚本应该通过读取json文件来形成csv。 json文件实际上是一行json,即。每一行代表一个json对象。在我的json文件中,每一行都有一个键和一个值。我需要读取值并从中形成csv。样本json文件为:
{"30b26e96052f7e4cda0fe2eff99d128ab2689cfee8637c0f50e540fae811c1b9": "{\"0\": \"440899\", \"1\": \"440900\", \"-1\": \"440898\"}"}
{"669b10aa7c547109650e12f9904152e74c52d55c0a6d6c66fe1ea7b0b37a4ba7": "{\"0\": \"440900\", \"1\": \"440901\", \"-1\": \"440899\"}"}
{"1e13e07b8484e730997fbe516f1e0adf94729dbb30c2e92dfbdb9839c6e4e434": "{\"0\": \"440901\", \"1\": \"440902\", \"-1\": \"440900\"}"}
现在,我的代码是:
import pandas as pd
import json
chunks = pd.read_json(
"test.json",
chunksize=100,
lines=True,
)
for df in chunks:
df = df.to_dict(orient='records')
for row in df:
print(row)
我正在寻找的输出是
{\"0\": \"440899\", \"1\": \"440900\", \"-1\": \"440898\"}
这意味着我想读取值,值本身是json格式,其中有键,值对。我的目的是在csv文件中编写这样的json:
0,1,-1
440899, 440900, 440898
..., ..., ...
我现在所得到的完全令人困惑:
{'1e13e07b8484e730997fbe516f1e0adf94729dbb30c2e92dfbdb9839c6e4e434': nan, '30b26e96052f7e4cda0fe2eff99d128ab2689cfee8637c0f50e540fae811c1b9': '{"0": "440899", "1": "440900", "-1": "440898"}', '3533a5d915469b16e04c10587c1a56ff5b0a6e16e2de3ae9873ad0e5b772c10c': nan, '573a0044e9315d4d598019f8bde1ceb93eed42f6c078f2cf9769e9c7a53fd9b6': nan, '669b10aa7c547109650e12f9904152e74c52d55c0a6d6c66fe1ea7b0b37a4ba7': nan, 'a5d172be131b5ff72d621a845f5d501d5d78352a3d52b8a86af88912824d4bd9': nan, 'e41d5c4ca5ae85908cac2d8a665d1292ba6a6f98dd720651300ea9f893fb53ae': nan, 'f825fbd436b2533dc3473cda15c304c9c79a108d2e59d18ec54fc9706966536b': nan}
{'1e13e07b8484e730997fbe516f1e0adf94729dbb30c2e92dfbdb9839c6e4e434': nan, '30b26e96052f7e4cda0fe2eff99d128ab2689cfee8637c0f50e540fae811c1b9': nan, '3533a5d915469b16e04c10587c1a56ff5b0a6e16e2de3ae9873ad0e5b772c10c': nan, '573a0044e9315d4d598019f8bde1ceb93eed42f6c078f2cf9769e9c7a53fd9b6': nan, '669b10aa7c547109650e12f9904152e74c52d55c0a6d6c66fe1ea7b0b37a4ba7': '{"0": "440900", "1": "440901", "-1": "440899"}', 'a5d172be131b5ff72d621a845f5d501d5d78352a3d52b8a86af88912824d4bd9': nan, 'e41d5c4ca5ae85908cac2d8a665d1292ba6a6f98dd720651300ea9f893fb53ae': nan, 'f825fbd436b2533dc3473cda15c304c9c79a108d2e59d18ec54fc9706966536b': nan}
答案 0 :(得分:2)
它认为您的键是列名。您的json看起来有点奇怪,像
那样重组它可能会更容易{"id": "30b26e96052f7e4cda0fe2eff99d128ab2689cfee8637c0f50e540fae811c1b9", "0": "440899", "1": "440900", "-1": "440898"}
或者也许
{"id": "30b26e96052f7e4cda0fe2eff99d128ab2689cfee8637c0f50e540fae811c1b9", "data": "{\"0\": \"440899\", \"1\": \"440900\", \"-1\": \"440898\"}"}
答案 1 :(得分:1)
请注意,您的json文件的每一行都包含一个带有一个键和一个值的JSON对象,并且该值是包含对象的JSON表示形式的 string 。 这是一个函数,该函数采用您所用格式的文件的路径,并返回所需格式的数据框:
import pandas as pd
import json
def load_file(file_path):
lines = []
with open(file_path, "r") as file:
for line in file:
obj = json.loads(line)
for k, v in obj.items():
record = json.loads(v)
lines.append(record)
return pd.DataFrame(lines)
在包含您的示例输入的文件上运行此操作,我得到了DataFrame
>>print(load_file("test.json"))
-1 0 1
0 440898 440899 440900
1 440899 440900 440901
2 440900 440901 440902
在此数据帧上调用to_csv将为您提供您指定的csv文件。