這一直使我堅持了整週的週末。我正在嘗試合併常見時間戳的不同資產的數據。每個資產的數據都是字典中的一個值。感興趣的數據存儲在一列中的列表中,因此需要先分開。這裏是未處理DF的樣本:函數應該清理數據的一半大小,而不是將其擴大一個數量級
data['Dogecoin'].head()
market_cap_by_available_supply price_btc price_usd volume_usd
0 [1387118554000, 3488670] [1387118554000, 6.58771e-07] [1387118554000, 0.000558776] [1387118554000, 0.0]
1 [1387243928000, 1619159] [1387243928000, 3.18752e-07] [1387243928000, 0.000218176] [1387243928000, 0.0]
2 [1387336027000, 2191987] [1387336027000, 4.10802e-07] [1387336027000, 0.000267749] [1387336027000, 0.0]
然後我將此功能market_cap_by_available_supply分開,節約它的成分爲對那些資產了新的數據幀:
data2 = {}
#sorting function
for coin in data:
#seperates timestamp and marketcap from their respective list inside each element
TS = data[coin].market_cap_by_available_supply.map(lambda r: r[0])
cap = data[coin].market_cap_by_available_supply.map(lambda r: r[1])
#Creates DataFrame and stores timestamp and marketcap data into dictionairy
df = DataFrame(columns=['timestamp','cap'])
df.timestamp = TS
df.cap = cap
df.columns = ['timestamp',str(coin)+'_cap']
data2[coin] = df
#converts timestamp into datetime 'yyy-mm-dd'
data2[coin]['timestamp'] = pd.to_datetime(data2[coin]['timestamp'], unit='ms').dt.date
它似乎很好地工作,產生正確的數據,樣本:
data2['Namecoin'].head()
timestamp Namecoin_cap
0 2013-04-28 5969081
1 2013-04-29 7006114
2 2013-04-30 7049003
3 2013-05-01 6366350
4 2013-05-02 5848626
然而,當我試圖合併所有dataframes,我得到了一個內存錯誤,我已經花了幾個小時試圖找出ŧ他的根,似乎上面的「排序功能」正在將數據幀的大小從12Mb增加到131Mb!它應該做相反的事情。有任何想法嗎 ?
在一個側面說明這裏是數據 https://www.mediafire.com/?9pcwroe1x35nnwl
我打開它這個泡菜funtion
with open("CMC_no_tuple_data.pickle", "rb") as myFile:
data = pickle.load(myFile)
編輯:對不起,在泡菜文件名的拼寫錯誤。 @Goyo通過pickle.dump計算出我簡單保存的數據和數據2的大小,並查看了它們各自的大小 @ Padraic Cunningham您使用了我提供的排序功能,它生成了一個較小的文件?這不是我的情況,當我嘗試合併數據幀時出現內存錯誤
你最近怎麼合併? –
「看起來上面的'排序函數'正在將數據幀的大小從12Mb增加到131Mb」你在說什麼排序函數?如果您的意思是您編寫的for循環,data2中的數據框比數據中的數據框小,所以如果每個數據框都實際上減小了大小。 – Goyo
這正是問題所在。數據幀較小,但所產生的字典(數據幀)的大小是13x的大小 –