我想創建一個CSV文件,將來自多個API調用的數據組合起來。我對基本的Python沒問題,我可以調用API,提取JSON數據,並將數據寫入CSV。我需要幫助的地方是高效合併數據,以便在數據提取完成後將其寫入CSV。如何使用Python中的多個API調用返回的數據構建CSV?
這就是數據看起來就像直接從API請求:
{u'dateTime': u'2011-03-28', u'value': u'2298'},
{u'dateTime': u'2011-03-29', u'value': u'2322'},
{u'dateTime': u'2011-03-30', u'value': u'2309'},
{u'dateTime': u'2011-03-31', u'value': u'2224'},
{u'dateTime': u'2011-04-01', u'value': u'2763'},
{u'dateTime': u'2011-04-02', u'value': u'3543'},
所以我會看很多合併這一起:
>APICALL1
2011-03-28,2298
2011-03-29,2322
2011-03-30,2309
>APICALL2
2011-03-28,432
2011-03-29,0
2011-03-30,444
每個API調用的結果看起來很漂亮非常相似:日期和價值。日期總是格式相同,所以這是我們的共同元素。
對於給定的日期和值,可能沒有值或0返回,所以我需要能夠說明沒有數據的情況。
理想的輸出會是這個樣子:
2011-03-28,2298,432,23952,765,31
2011-03-29,2322,0,432353,766,31
2011-03-30,2309,444,2343923,0,32
2011-03-31,2224,489,3495,765,33
我有大約15電話要打,而每個返回響應包含近似800行數據(800天,基本上是由每天1排成長進入未來)。我需要每天運行幾次,所以我在一定程度上關注效率,因爲這種增長越來越大。不幸的是,歷史數據可能會改變,所以我需要在每次運行命令時重建整個列表。但是,歷史數據很少發生變化,只有很小的百分比變化,所以如果只有更新數據纔有效率,我願意接受。
我知道我可以做的一個選擇是從第一個API調用中將所有內容寫入CSV文件,然後重新打開文件併爲每個後續調用寫入更多數據到CSV(即15個單獨的讀取和每個程序執行寫入CSV)。這對我來說聽起來不太有效。
我應該在內存中使用SQLite來構建數據集,然後在最後將其轉儲爲CSV嗎?列表清單是否更好?我對SQL不太瞭解,儘管如果這是正確的路,我確實知道這很危險。
謝謝Viktor!我跑了你的確切代碼,我得到:「引發異常('項目名稱重疊')」。我相信原因是兩個JSON響應都使用'value'作爲索引名稱。如果我在第二個調用響應中將索引名稱更改爲'value2',則代碼有效。有沒有辦法處理這個熊貓內部問題,還是應該在使用pd之前仔細研究數據? – briancl
@ user2726872您可以通過重命名該列來處理它。我更新了代碼。由於新版本可以處理重複名稱,因此您可能會使用真正舊版本的熊貓。 –
我現在收到一個'inplace'是關鍵字的錯誤。我的問題一定是老大熊貓。我從Ubuntu的倉庫安裝了'python-pandas',這個倉庫一定很舊。我將更新熊貓而不是修復過時的代碼。謝謝您的幫助! – briancl