簡體   English   中英

元組元素到python中的數據框列

[英]Tuple elements to dataframe column in python

我有包含 0-3 組對的 2D 列表(數據將始終配對)。

例子:

[[2.0, 0.1], [7.0, 0.6], [1.0, 0.3]] or
[[9.0, 0.7], [1.0, 0.2]]             or
[[]]

我希望能夠將每對元素的每個元素附加到現有數據框中自己的列中。

使用上述數據的所需數據幀:

other_data,    pair_0_0, pair_0_1, pair_1_0, pair_1_1, pair_2_0, pair2_1
'blah',        2.0,      0.1,      7.0,      0.6,      1.0,      0.3    
'blah blah',   9.0,      0.7,      1.0,      0.2
'blaah'       

它需要能夠處理空值,並保持列表的順序。

我已經嘗試了以下方法,但是如果我沒有 3 對,它就不會給出索引錯誤。

df.loc[len(df)] = ['blah blah', list2D[0][0], list2D[0][1], list2D[1][0], list2D[1][1], list2D[2][0], list2D[2][1]

我認為這會涉及一些列表理解,但我不知道該怎么做。

列表numpy.ravel中的numpy.ravel怎么樣:

l1 = [[2.0, 0.1], [7.0, 0.6], [1.0, 0.3]]
l2 = [[9.0, 0.7], [1.0, 0.2]]
l3 = [[]]

df = pd.DataFrame([np.ravel(x) for x in [l1, l2, l3]])

# Fix column headers
df.columns = [f'pair_{x//2}_{x%2}' for x in range(df.shape[1])]

[出去]

   pair_0_0  pair_0_1  pair_1_0  pair_1_1  pair_2_0  pair_2_1
0       2.0       0.1       7.0       0.6       1.0       0.3
1       9.0       0.7       1.0       0.2       NaN       NaN
2       NaN       NaN       NaN       NaN       NaN       NaN

更新

例如,要將單個列表append到現有DataFrame ,請使用:

l4 = [[3.0, 0.2], [6.0, 0.8], [1.2, 0.6]]

df.append(pd.DataFrame([np.ravel(l4)]).rename(columns=lambda x: f'pair_{x//2}_{x%2}'))

[出去]

   pair_0_0  pair_0_1  pair_1_0  pair_1_1  pair_2_0  pair_2_1
0       2.0       0.1       7.0       0.6       1.0       0.3
1       9.0       0.7       1.0       0.2       NaN       NaN
2       NaN       NaN       NaN       NaN       NaN       NaN
0       3.0       0.2       6.0       0.8       1.2       0.6

或者在循環中使用pandas.concat從頭開始創建DataFrame你可以這樣做:

df = pd.DataFrame()

for l in  [l1, l2, l3]:
    df = pd.concat([df, pd.DataFrame([np.ravel(l)]).rename(columns=lambda x: f'pair_{x//2}_{x%2}')],
                   sort=True)

另一種非常簡單的方法是使用 Python dict comprehension 插入一個新條目 e:

row = {f'pair_{j}_{i}': e[j][i] for j in range(len(e)) for i in range(len(e[j]))}

例子:

e1 = [[2.0, 0.1], [7.0, 0.6], [1.0, 0.3]]
e2 = [[9.0, 0.7], [1.0, 0.2]]
e3 = [[]]

df = pd.DataFrame({})

for e in [e1, e2, e3]:
    row = {f'pair_{j}_{i}': e[j][i] for j in range(len(e)) for i in range(len(e[j]))}
    df = df.append(row, ignore_index=True)

打印(df)

   pair_0_0  pair_0_1  pair_1_0  pair_1_1  pair_2_0  pair_2_1
0       2.0       0.1       7.0       0.6       1.0       0.3
1       9.0       0.7       1.0       0.2       NaN       NaN
2       NaN       NaN       NaN       NaN       NaN       NaN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM