我得到這種格式的資料..
ListA =
[
[('test1', 'aaa', 'A'),('test2', 'bbb', 'B'),('test3', 'ccc', 'C')],
[('test4', 'ddd', 'D'),('test5', 'eee', 'E'),('test6', 'fff', 'F')],
[('test7', 'ggg', 'A'),('test8', 'hhh', 'B'),('test9', 'ppp', 'C')]
]
我想轉換成這種格式
ID, ColA, ColB, ColC,
1, 'test1', 'aaa', 'A'
1, 'test2', 'bbb', 'B'
1, 'test3', 'ccc', 'C'
2, 'test4', 'ddd', 'D'
2, 'test5', 'eee', 'E'
2, 'test6', 'fff', 'F'
3, 'test7', 'ggg', 'A'
3, 'test8', 'hhh', 'B'
3, 'test9', 'ppp', 'C'
uj5u.com熱心網友回復:
您可以使用itertools.chain:
from itertools import chain
df = pd.DataFrame(chain.from_iterable(ListA),
columns=['ColA', 'ColB', 'ColC'])
輸出:
ColA ColB ColC
0 test1 aaa A
1 test2 bbb B
2 test3 ccc C
3 test4 ddd D
4 test5 eee E
5 test6 fff F
6 test7 ggg A
7 test8 hhh B
8 test9 ppp C
使用索引(可以處理不均勻的串列長度):
from itertools import chain
import numpy as np
idx = np.repeat(np.arange(len(ListA)) 1, list(map(len, ListA)))
df = pd.DataFrame(chain.from_iterable(ListA),
columns=['ColA', 'ColB', 'ColC'],
index=idx).rename_axis('ID')
輸出:
ColA ColB ColC
ID
1 test1 aaa A
1 test2 bbb B
1 test3 ccc C
2 test4 ddd D
2 test5 eee E
2 test6 fff F
3 test7 ggg A
3 test8 hhh B
3 test9 ppp C
uj5u.com熱心網友回復:
嵌套串列理解來拯救:
df = pd.DataFrame(
data=[tup for sublist in ListA for tup in sublist],
columns=['ColA', 'ColB', 'ColC'])
輸出:
ColA ColB ColC
1 test1 aaa A
1 test2 bbb B
1 test3 ccc C
2 test4 ddd D
2 test5 eee E
2 test6 fff F
3 test7 ggg A
3 test8 hhh B
3 test9 ppp C
如果您希望在預期輸出中保留索引:
df = pd.DataFrame(
data=[tup for sublist in ListA for tup in sublist],
columns=['ColA', 'ColB', 'ColC'],
index=np.arange(len(ListA)).repeat([len(sublist) for sublist in ListA]) 1)
uj5u.com熱心網友回復:
這是explode用于保留索引的解決方案:
df = pd.Series(ListA).explode().pipe(lambda x: pd.DataFrame(x.tolist(), index=x.index 1, columns=['ColA', 'ColB', 'ColC']))
輸出:
>>> df
ColA ColB ColC
1 test1 aaa A
1 test2 bbb B
1 test3 ccc C
2 test4 ddd D
2 test5 eee E
2 test6 fff F
3 test7 ggg A
3 test8 hhh B
3 test9 ppp C
uj5u.com熱心網友回復:
為了好玩,另一種解決方案使用pandas.concat:
df = (pd
.concat(dict(enumerate(map(pd.DataFrame, ListA), start=1)))
.droplevel(1)
.rename(columns=dict(enumerate(['ColA', 'ColB', 'ColC'])))
)
要么:
from itertools import count
c = count(1)
df = pd.concat([pd.DataFrame(x, index=[next(c)]*len(x),
columns=['ColA', 'ColB', 'ColC'])
for x in ListA])
輸出:
ColA ColB ColC
1 test1 aaa A
1 test2 bbb B
1 test3 ccc C
2 test4 ddd D
2 test5 eee E
2 test6 fff F
3 test7 ggg A
3 test8 hhh B
3 test9 ppp C
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/445134.html
標籤:python-3.x 熊猫 列表 数据框
上一篇:熊貓系列真值給出模棱兩可的結果
下一篇:根據另一列值更改值符號
