我已經列出轉換大熊貓一系列列表到數據幀
import pandas as pd
s = pd.Series([[1, 2, 3], [4, 5, 6]])
的系列,我想與每一列數據框的列表。
沒有from_items
,from_records
,DataFrame
Series.to_frame
似乎工作。
如何做到這一點?
我已經列出轉換大熊貓一系列列表到數據幀
import pandas as pd
s = pd.Series([[1, 2, 3], [4, 5, 6]])
的系列,我想與每一列數據框的列表。
沒有from_items
,from_records
,DataFrame
Series.to_frame
似乎工作。
如何做到這一點?
您可以使用from_items
像這樣(假設你的列表是相同的長度):
pd.DataFrame.from_items(zip(s.index, s.values))
0 1
0 1 4
1 2 5
2 3 6
或
pd.DataFrame.from_items(zip(s.index, s.values)).T
0 1 2
0 1 2 3
1 4 5 6
取決於您所需的輸出。
這可以是比使用apply
(如在@Wen's answer使用,然而,也還針對不同長度的列表工作)快得多:
%timeit pd.DataFrame.from_items(zip(s.index, s.values))
1000 loops, best of 3: 669 µs per loop
%timeit s.apply(lambda x:pd.Series(x)).T
1000 loops, best of 3: 1.37 ms per loop
和
%timeit pd.DataFrame.from_items(zip(s.index, s.values)).T
1000 loops, best of 3: 919 µs per loop
%timeit s.apply(lambda x:pd.Series(x))
1000 loops, best of 3: 1.26 ms per loop
另外@Hatshepsut's answer被相當快(也適用於不同長度的列表):
%timeit pd.DataFrame(item for item in s)
1000 loops, best of 3: 636 µs per loop
和
%timeit pd.DataFrame(item for item in s).T
1000 loops, best of 3: 884 µs per loop
最快溶液似乎是@Abdou's answer(對於Python 2測試;也適用於不同長度的列表;在Python 3.6+)使用itertools.zip_longest
:
%timeit pd.DataFrame.from_records(izip_longest(*s.values))
1000 loops, best of 3: 529 µs per loop
一個附加選項:
pd.DataFrame(dict(zip(s.index, s.values)))
0 1
0 1 4
1 2 5
2 3 6
您可以通過一系列這樣的尋找
s.apply(lambda x:pd.Series(x))
0 1 2
0 1 2 3
1 4 5 6
或者
s.apply(lambda x:pd.Series(x)).T
Out[133]:
0 1
0 1 4
1 2 5
2 3 6
迭代:
series = pd.Series([[1, 2, 3], [4, 5, 6]])
pd.DataFrame(item for item in series)
0 1 2
0 1 2 3
1 4 5 6
相當快;應該把這個添加到下面的時間...(upvoted) – Cleb
pd.DataFrame.from_records
應該也使用itertools.zip_longest
:
from itertools import zip_longest
pd.DataFrame.from_records(zip_longest(*s.values))
# 0 1
# 0 1 4
# 1 2 5
# 2 3 6
似乎是最快的解決方案(upvoted )。您可能想補充說這是一個Python3解決方案;在Python 2中,它將是'itertools.izip_longest'。 – Cleb
如果序列的長度是超高(超過1m),你可以使用:
s = pd.Series([[1, 2, 3], [4, 5, 6]])
pd.DataFrame(s.tolist())
如果你想添加它,@ Abdou的'itertools'解決方案似乎更快。但確實需要額外的庫。在適用的情況下,還可能注意到相同長度的限制? – Hatshepsut
@Hatshepsut:已添加。相同的長度似乎並不需要,對於s = pd.Series([[1,2,3,4],[4,5,6]])也可以正常工作' – Cleb