2014-09-12 110 views
1

我在使用JSON字符串輸出時遇到了問題。我使用的製表符分隔的CSV文件,它看起來像這樣:Python pandas to_json()無效格式

date  time  loc_id country name sub1_id sub2_id type 
2014-09-11 00:00:01 179  US  acmnj 269  382  ico 
2014-09-11 00:00:01 179  US  acmnj 269  382  ico 
2014-09-11 00:00:01 179  GB  acmnj 269  382  ico 
2014-09-11 00:00:01 179  US  acmnj 269  382  ico 
2014-09-11 00:00:02 179  GB  acmnj 269  383  ico 
2014-09-11 00:00:02 179  JP  acmnj 269  383  ico 

代碼如下所示:

df = pd.read_csv('log.csv',sep='\t',encoding='utf-16') 
count = df.groupby(['country','name','sub1_id','sub2_id','type']).size() 
print(count.order(na_position='last',ascending=False).to_frame().to_json(orient='index')) 

輸出看起來像這樣(前幾行):

{"["US","acmnj",269,383,"ico"]":{"0":76174},"["US","acmnj",269,382,"ico"]":{"0":73609},"["IT","acmnj",269,383,"ico"]":{"0":54211},"["IT","acmnj",269,382,"ico"]":{"0":52398},"["GB","acmnj",269,383,"ico"]":{"0":41346},"["GB","acmnj",269,382,"ico"]":{"0":40140},"["US","acmnj",269,405,"ico"]":{"0":39482},"["US","acmnj",269,400,"ico"]":{"0":39303},"["US","popcdd",178,365,"ico"]":{"0":33168},"["IT","acmnj",269,400,"ico"]":{"0":33026},"["IT","acmnj",269,405,"ico"]":{"0":32824},"["IT","achrfb141",141,42,"ico"]":{"0":26986},"["GB","acmnj",269,405,"ico"]":{"0":25895},"["IN","acmnj",269,383,"ico"]":{"0":25647},"["GB","acmnj",269,400,"ico"]":{"0":25488...

我想在PHP中加載這個輸出,但當我試圖解碼這個時,我得到NULL。我使用JSON驗證器來檢查字符串,它是無效的。我也試過沒有orient參數,但我得到無效的JSON格式。

回答

2

這似乎是大熊貓的問題。我再現了你的錯誤。 「拆分」,「記錄」,「索引」,「列」和「值」可能會帶來幾個不同的結果東方參數:

DataFrame.to_json

就你而言,它好像是'分裂','記錄'和'值'的工作,但'索引'和'列'不是。

您可以使用Python中json模塊快速測試:

df = pd.read_csv('log.csv',sep='\t',encoding='utf-16') 
count = df.groupby(['country','name','sub1_id','sub2_id','type']).size() 
f=count.order(ascending=False).to_frame() 
json.loads(f.to_json(orient='index')) # This failed for me 
json.loads(f.to_json(orient='records')) #This worked 
+0

我已經試過了。然後我得到這樣的輸出...... '[{「0」:157965},{「0」:154559},{「0」:75518},{「0」:74515},{「0」: 73697},{「0」:71854},{「0」:56883} ...' 我沒有「關鍵值」 - 我用來對計數進行分組的列。我需要使用PHP在MySQL中插入這些值。 – sstevan 2014-09-13 09:34:01

+0

你需要通過PHP嗎?你可以使用DataFrame.to_sql()直接發送一個數據框到MySql - 在你的情況下工作嗎? – trvrm 2014-09-13 13:54:00

+0

是的。我需要爲報告製作PHP API腳本。 – sstevan 2014-09-13 14:57:17