2016-02-05 173 views
1

以下是數據示例。如何分離包含列表的熊貓元素

data['nxt'].head() 
​ 
Out[47]: 
market_cap_by_available_supply price_btc price_usd volume_usd 
0 [1386136000000, 15091900] [1386136000000, 1.3982e-05] [1386136000000, 0.0150919] [1386136000000, 0.0] 
1 [1386222394000, 14936300] [1386222394000, 1.31922e-05] [1386222394000, 0.0149363] [1386222394000, 0.0] 
2 [1386308781000, 11237100] [1386308781000, 1.12001e-05] [1386308781000, 0.0112371] [1386308781000, 0.0] 
3 [1386395502000, 7031430] [1386395502000, 9.6644e-06] [1386395502000, 0.00703143] [1386395502000, 0.0] 
4 [1386481920000, 6292640] [1386481920000, 8.82299e-06] [1386481920000, 0.00629264] [1386481920000, 0.0] 

我只關心:market_cap_by_available_supply

data['nxt'].market_cap_by_available_supply 

0  [1386136000000, 15091900] 
1  [1386222394000, 14936300] 
2  [1386308781000, 11237100] 
3  [1386395502000, 7031430] 
4  [1386481920000, 6292640] 

這個職位的目的是:我們如何能夠單獨這爲兩列:時間戳和Marketcap?

但是我在這裏的最終目標是(使用下面的代碼)

創建包含dashcoin marketcaps和時間戳一個新的數據幀,然後依次添加對應於Dash的時間戳其他硬幣的marketcaps,任何幫助,這將是巨大的。

import numpy as np 
from pandas import Series, DataFrame 
import pandas as pd 

coins = ['dashcoin','litecoin','dogecoin','nxt'] 

API = 'https://api.coinmarketcap.com/v1/datapoints/' 

data = {} 

for coin in coins: 
    data[coin]=(pd.read_json(API + coin)) 

MC_data = pd.DataFrame(columns=[['Timestamp']+coins]) 

編輯:

我使用循環稍後我會加入many'coins'。 @timmy,提取時間戳和上限的方法很好,但我無法使合併方法正常工作。

data2 = {} 

for coin in coins: 
    #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 
    data2[coin] = df 

for coin in coins: 

data2['merged'] = data2['merged'].merge(data[coin], on='timestamp', how='outer') 


KeyError: 'merged' 
+0

我我的回答對您解決最近的問題的更新。這個問題是一個事實,即你想(在循環中的第一次迭代沒有什麼'數據2 [「合併」]')與沒有合併的第一個硬幣數據幀 – TimmyCarbone

回答

0

關於你的第一個問題,你可以使用地圖功能:

# Just renaming for readability 
cap_by_supply = data['nxt']['market_cap_by_available_supply'] 

# Exploding the market_cap_by_available_supply array into 2 columns 
data['nxt']['timestamp'] = cap_by_supply.map(lambda r: r[0]) 
data['nxt']['cap'] = cap_by_supply.map(lambda r: r[1]) 

關於你的第二個問題,如果我深知:
您可以爲每個硬幣類型數據幀。它們應該全部採用相同的格式,timestamp列和cap列。然後使用merge function通過時間戳列合併它們。你一定要刪除所有你不想合併的列,例如:

# Drop unwanted columns, to repeat for each coin dataframe. 
# Here we keep timestamp and cap only, for example. 
data['nxt'] = data['nxt'].drop([ 
    'market_cap_by_available_supply', 
    'price_btc', 
    'price_usd', 
    'volume_usd' 
], axis=1) 

# Merge all the coin frames into one 
data['coins'] = data['dashcoin'].merge(data['litecoin'], on='timestamp', how='outer') 
data['coins'] = data['coins'].merge(data['dogecoin'], on='timestamp', how='outer') 
data['coins'] = data['coins'].merge(data['nxt'], on='timestamp', how='outer') 

你想指定outer加入讓你把所有的記錄。

希望它能幫助,我正在發言,並建議,如果任何人更好地理解或有一個更好的解決方案。


編輯關於OP的編輯:

在你的循環的第一次迭代,沒有什麼在data2['merged'],你不能合併什麼也沒有一個數據幀。我們只需要說data2['merged']首先是第一個硬幣數據幀的副本。然後,我們遍歷coins從第二數據幀開始,因爲第一種是已經在data2['merged']

... 

data2['merged'] = data2[coins[0]] 
for coin in coins[1:]: 
    data2['merged'] = data2['merged'].merge(data2[coin], on='timestamp', how='outer') 
+0

這是偉大的人的感謝,我決不會想通如何做的第一部分,我不知道是否有一個更簡單的方法。無論哪種方式,我需要研究蘭巴。 我只是試圖第二部分 – Dave990

+0

嗯,不能得到的合併方法的工作,在我的編輯 – Dave990

+0

@ Dave990我加了一些代碼在我的回答對您編輯點評。 – TimmyCarbone