我是python(pandas,numPy等)的新手。 我想知道以最佳和最佳方式解决这一任务的完美方法。
我有一个巨大的文件,其格式如下 - 期望一切都在一行:
{"order_reference":"0658-2147","billing_address_zip_code":"8800"}
{"order_reference":"0453-2200","billing_address_zip_code":"8400"}
{"order_reference":"0554-3027","billing_address_zip_code":"8820"}
{"order_reference":"0382-3108","billing_address_zip_code":"3125"}
{"order_reference":"0534-4059","billing_address_zip_code":"3775"}
{"order_reference":"0118-1566","billing_address_zip_code":"3072"}
{"order_reference":"0384-6897","billing_address_zip_code":"8630"}
{"order_reference":"0361-5226","billing_address_zip_code":"4716"}
{"order_reference":"0313-6812","billing_address_zip_code":"9532"}
{"order_reference":"0344-6262","billing_address_zip_code":"3600"}
将这个文件读入python中的字典或numPy中的dataFrame的最简单方法是什么?目标是将billing_address_zip_code加入大型JSON文件,以获得有关order_reference的更多见解。
是否有使用熊猫的功能?我想这将是最快的方式,但由于它不是标准的JSON,我不知道该怎么做。
我很抱歉初学者的问题,但我在互联网上搜索了很多,但找不到正确的答案。这真的有助于我找到正确的方法来完成这类任务。 对于任何帮助或链接,我非常感谢。 西蒙
PS:您使用哪种云环境来完成此类任务?哪个最适合python和数据科学库?
更新
我使用以下代码格式化为有效的JSON并成功加载json.loads():
#syntay: python 3
import json
#small test file
my_list = "["+open("orders_play_around.json").read().replace("}{","},\n{")+"]"
d = json.loads(my_list)
到目前为止一切顺利。现在是下一个挑战,我如何将这个json字典加入另一个在 billing_address_zip_code 上有连接的JSON文件? 另一个JSON看起来像这样:
{
"data": [
{
"BFS-Nr": 1,
"Raum mit städtischem Charakter 2012": 4,
"Typologie der MS-Regionen 2000 (2)": 3,
"E": 679435,
"Zusatzziffer": 0,
"Agglomerationsgrössenklasse 2012": 1,
"Gemeinde-typen (9 Typen) 2000 (1)": 4,
"N": 235653,
"Stadt/Land-Typologie 2012": 3,
"Städte 2012": 0,
"Gemeinde-Grössenklasse 2015": 7,
"BFS Nr.": 1,
"Sprachgebiete 2016": 1,
"Europäsiche Berggebietsregionen (2)": 1,
"Gemeindename_1": "Aeugst am Albis",
"Anwendungsgebiete für Steuerer-leichterungen 2016": 0,
"Kantonskürzel": "ZH",
"Kanton": 1,
"Metropolräume 2000 (2)": 1,
"PLZ": 8914,
"Bezirk": 101,
"Gemeindetypologie 2012\n(25 Typen)": 237,
"Raumplanungs-regionen": 105,
"Gemeindetypologie 2012\n(9 Typen)": 23,
"Agglomerationen und Kerne ausserhalb Agglomerationen 2012": 261,
"Ortschaftsname": "Aeugst am Albis",
"Arbeitsmarktregionen 2000 (2)": 10,
"Gemeinde-typen\n(22 Typen) 2000 (1)": 11,
"Städtische / Ländliche Gebiete 2000 (1)": 2,
"Grossregionen": 4,
"Gemeindename": "Aeugst am Albis",
"MS-Regionen (2)": 4,
"Touris-mus Regionen 2017": 3,
"DEGURBA 2011 eurostat": 3
},
{....}
}
从plz.js和 billing_address_zip_code 从orders_play_around.json加入关键 PLZ 的最简单方法是什么? 我可以毫无问题地将它加载到JSON文件中:
plz_data=open('plz.js').read()
plz = json.loads(plz_data)
抱歉这条长信息。但希望有人可以帮我解决这个简单的问题。目标是将其绘制在地图上或图表上,我可以看到哪个PLZ(邮政编码)订单最多。
答案 0 :(得分:0)
由于您提到将文件转换为正确的JSON是您的最初目标,并且您不介意sed
,请尝试:
sed 's|}{|}\n{|g' originalfile > result
注意我添加了换行符,而不是逗号。可能更适合您将来的编辑。您可以使用-i
标记,以便进行sed
编辑,但这样更安全。如果你真的想使用Python,那么标准Python并不是什么大问题。最安全的是按字符阅读:
with open("originalfile") as fd:
while True:
ch=fd.read(1)
if not ch: break
if ch =="{": print("\n")
print(ch,end="")
或者只是替换和打印(从未测试过Python的限制,我猜这会起作用:
print(open("originalfile").read().replace("}{","}\n{"))
这不需要regex
- 这有点矫枉过正。一旦这是一个合适的Json
文件,它就会更容易使用,包括通过Json
加载pandas.read_json
。
答案 1 :(得分:0)
这是一种方式。
data = []
with open("originalfile") as fp:
for l in fp:
clean_line = ([x.replace("{","").replace("}\n","").replace("\"","") for x in l.split(",")])
data.append(clean_line)
然后,您可以将数据列表转换为pandas数据帧并导出为JSON。
df = pandas.DataFrame(data)
df.to_json()
如果您要删除文字,例如“billing_address_zip_code”,只保留数据,然后就可以了
data = []
with open(filepath) as fp:
for l in fp:
splitted = ([x.split(":")[1] for x in l.split(",")])
data.append(([x.replace("}\n","").replace("\"","") for x in splitted]))