2017-09-26 89 views
3

的列表嵌套的熊貓數據幀所以我有一個列表如下:創建一個從長度不等

aa = ['aa1', 'aa2', 'aa3', 'aa4', 'aa5'] 
bb = ['bb1', 'bb2', 'bb3', 'bb4'] 
cc = ['cc1', 'cc2', 'cc3'] 

,然後創建成嵌套列表:

nest = [aa, bb, cc] 

我想創建一個據幀如下:

aa bb cc 
aa1 bb1 cc1 
aa2 bb2 cc2 
aa3 bb3 cc3 
aa4 bb4 nan 
aa5 nan nan 

我已經試過:

pd.DataFrame(nest, columns=['aa', 'bb', cc']) 

但結果是這樣的,每個列表被寫入作爲行(相對於一列)

+0

'名單(itertools.izip_longest(AA,BB,CC))' –

回答

3

zip_longest功能從itertools做到這一點:

>>> import itertools, pandas 
>>> pandas.DataFrame((_ for _ in itertools.zip_longest(*nest)), columns=['aa', 'bb', 'cc']) 
    aa bb cc 
0 aa1 bb1 cc1 
1 aa2 bb2 cc2 
2 aa3 bb3 cc3 
3 aa4 bb4 None 
4 aa5 None None 

如果你有熊貓的舊版本,你可能需要在列表構造包zip_longest。在較老的Python中,您可能需要撥打izip_longest而不是zip_longest

+0

我正在等你發表這個( - : – piRSquared

+0

對不起,這也行不通 '模塊itertools沒有屬性izip_longest'。我使用Python 3,如果有幫助和熊貓版本'0.20.3' – Kvothe

+0

我正在等待其中一個愚蠢的Windows 10更新(84%),而Mac只有python2.7 - 它在更新的Python IINM中更名爲zip_longest。 –

1

選項1

pd.DataFrame(nest, ['aa', 'bb', 'cc']).T 

    aa bb cc 
0 aa1 bb1 cc1 
1 aa2 bb2 cc2 
2 aa3 bb3 cc3 
3 aa4 bb4 None 
4 aa5 None None 

選項2
Homebrew zip_longest

f = lambda x, n: x[n] if n < len(x) else None 
n, m = max(map(len, nest)), len(nest) 

pd.DataFrame(
    [[f(j, i) for j in nest] for i in range(n)], 
    columns=['aa', 'bb', 'cc'] 
) 

    aa bb cc 
0 aa1 bb1 cc1 
1 aa2 bb2 cc2 
2 aa3 bb3 cc3 
3 aa4 bb4 None 
4 aa5 None None 
+0

對不起,選項1似乎並沒有爲我工作。 '3列通過,通過數據有5列'是錯誤 – Kvothe

+0

您使用的是什麼版本的熊貓? 'pd .__ version__' – piRSquared

+0

'0.20.3'是熊貓的版本 – Kvothe

0

或許

pd.DataFrame(data={'value':nest},index=['aa', 'bb', 'cc']).value.apply(pd.Series).T 
Out[1297]: 
    aa bb cc 
0 aa1 bb1 cc1 
1 aa2 bb2 cc2 
2 aa3 bb3 cc3 
3 aa4 bb4 NaN 
4 aa5 NaN NaN