2017-03-14 47 views
1

我正在使用API​​來獲取一些數據。返回的數據是Unicode(不是字典/ json對象)。蟒蛇 - 將列表中的unicode轉換爲數據框

# get data 
data = [] 
for urls in api_call_list: 
    data.append(requests.get(urls)) 

的數據是這樣的:

>>> data[0].text 
u'Country;Celebrity;Song Volume;CPP;Index\r\nus;Taylor Swift;33100;0.83;0.20\r\n' 

>>> data[1].text 
u'Country;Celebrity;Song Volume;CPP;Index\r\nus;Rihanna;28100;0.76;0.33\r\n' 

我想把這個與國家,名人,宋,音量,CPP和索引DataFrame列名。

首先,我想它\r\n這樣分割:

x = [i.text.split('\r\n') for i in data] 

,並得到:

[[u'Country;Celebrity;Song Volume;CPP;Index', 
    u'us;Taylor Swift;33100;0.83;0.20', 
    u''], 
[u'Country;Celebrity;Song Volume;CPP;Index', 
    u'us;Rihanna;28100;0.76;0.33', 
    u'']] 

不知道在哪裏可以從這裏走。 。 。

+0

什麼應該是最終結果,用key:value作爲字典,然後是數據框。 – bhansa

回答

3

您可以使用pandas.read_csv數據數據幀的列表,然後將它們連接起來:

# if you use python 2 change this to // from io import BytesIO and use BytesIO instead 
from io import StringIO  
import pandas as pd 

pd.concat([pd.read_csv(StringIO(d), sep = ";") for d in data]) 

enter image description here

由於實際數據是反應,您就可以在列表需要先訪問文本:

pd.concat([pd.read_csv(StringIO(d.text), sep = ";") for d in data]) 

data = [u'Country;Celebrity;Song Volume;CPP;Index\r\nus;Taylor Swift;33100;0.83;0.20\r\n', 
     u'Country;Celebrity;Song Volume;CPP;Index\r\nus;Rihanna;28100;0.76;0.33\r\n'] 
+1

確切的說:)它曾經是從StringIO導入StringIO,看到一個很好的導入版本在這裏http://stackoverflow.com/questions/22604564/how-to-create-a-pandas-dataframe-from-string – Roelant

+0

這是真的很酷--StringIO對文本做了什麼? – vagabond

+0

它將字符串對象轉換爲類似句柄的文件,以便讀取'pandas.read_csv'。 – Psidom