我有多個 json 格式的字典“some.json”,看起來像這些
{
"my_dict" : {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3'
},
"my_dict2" : {
'key8': 'value8',
'key9': 'value9',
'key10': 'value10'
}
}
鍵和值都是字串。我想將其匯出為csv垂直格式,然后將其讀回json檔案。例如,當我將一個專案添加到 my_dictcsv格式時,它也會被添加到json檔案中。
所需的輸出
my_dict
key1,value1
key2,value2
key3,value3
my_dict2
key8,value8
key9,value9
key10,value10
到目前為止我得到了一個解決方案,但問題是,字典的名稱沒有寫在 csv 檔案上,所以不能讀回 json 檔案
import pandas as pd
with open('some.json') as f_input:
df = pd.read_json(f_input)
df = df.bfill(axis='columns')
df.iloc[:, 0].to_csv('some.csv', encoding='utf-8', header=False)
uj5u.com熱心網友回復:
使用file.writedict 名稱創建新檔案:
import json
with open('some.json') as f:
d = json.load(f)
#sample
d = { "my_dict" : { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3'},
"my_dict2" : { 'key8': 'value8', 'key9': 'value9', 'key10': 'value10'}}
with open("some1.csv", 'w') as f:
for k, v in d.items():
f.write(k '\n')
for k1, v1 in v.items():
f.write(f"{k1},{v1}\n")
my_dict
key1,value1
key2,value2
key3,value3
my_dict2
key8,value8
key9,value9
key10,value10
并為回讀:
df = pd.read_csv("some1.csv", names=['a','b'])
m = df['b'].isna()
df['new'] = df['a'].where(m).ffill()
s = df[~m].set_index(['new','a'])['b']
d = {level: s.xs(level).to_dict() for level in s.index.levels[0]}
print (d)
{'my_dict': {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'},
'my_dict2': {'key8': 'value8', 'key9': 'value9', 'key10': 'value10'}}
編輯:
如果應更改格式:
d = { "my_dict" : { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3'},
"my_dict2" : { 'key8': 'value8', 'key9': 'value9', 'key10': 'value10'}}
with open("some1.csv", 'w') as f:
for k, v in d.items():
for k1, v1 in v.items():
f.write(f"{k},{k1},{v1}\n")
my_dict,key1,value1
my_dict,key2,value2
my_dict,key3,value3
my_dict2,key8,value8
my_dict2,key9,value9
my_dict2,key10,value10
s = pd.read_csv("some1.csv", names=['b'], squeeze=True)
print (s)
my_dict key1 value1
key2 value2
key3 value3
my_dict2 key8 value8
key9 value9
key10 value10
Name: b, dtype: object
d = {level: s.xs(level).to_dict() for level in s.index.levels[0]}
print (d)
{'my_dict': {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'},
'my_dict2': {'key8': 'value8', 'key9': 'value9', 'key10': 'value10'}}
uj5u.com熱心網友回復:
我修復了你的some.json檔案:
{
"my_dict": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
},
"my_dict2": {
"key8": "value8",
"key9": "value9",
"key10": "value10"
}
}
現在您可以將 json 檔案轉換為 csv 檔案:
pd.read_json('some.json', orient='index').stack().to_csv('some.csv', header=False)
你的some.csv檔案看起來像:
my_dict,key1,value1
my_dict,key2,value2
my_dict,key3,value3
my_dict2,key8,value8
my_dict2,key9,value9
my_dict2,key10,value10
注意:使用上述格式,如果需要,您可以輕松地在 Excel 中使用您的 csv 檔案。
回滾操作:
d = pd.read_csv('some.csv', header=None, index_col=0).groupby(0, sort=False) \
.apply(lambda x: {k: v for k, v in zip(x[1], x[2])}).to_dict()
print(d)
# Output:
{'my_dict': {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'},
'my_dict2': {'key8': 'value8', 'key9': 'value9', 'key10': 'value10'}}
uj5u.com熱心網友回復:
有點hacky,但產生的輸入正是您所追求的:
[f'{col}\n{df[col].dropna().to_csv(header=False)}' for col in df.columns)]
您可以''.join(...)然后一次性寫入或添加mode='a',,to_csv以便將輸出直接附加到某個檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372802.html
上一篇:允許python在python中使用重復的列名輸入csv
下一篇:用熊貓(python)繪制資料框
