2017-08-31 36 views
1

我有一個DataFrame包含每列上的列表,如下例所示,只有兩列。提取熊貓列中的列表元素

Gamma Beta 
0 [1.4652917656926299, 0.9326935235505321, float] [91, 48.611034768515864, int] 
1 [2.6008354611105995, 0.7608529935313189, float] [59, 42.38646954167245, int] 
2 [2.6386970166722348, 0.9785848171888037, float] [89, 37.9011122659478, int] 
3 [3.49336632573625, 1.0411524946972244, float] [115, 36.211134224288344, int] 
4 [2.193991200007534, 0.7955134305428825, float] [128, 50.03563864975485, int] 
5 [3.4574527664490997, 0.9399880977511021, float] [120, 41.841146628802875, int] 
6 [3.1190582380554863, 1.0839109431114795, float] [148, 55.990072419824514, int] 
7 [2.7757359940789916, 0.8889801332053203, float] [142, 51.08885697101243, int] 
8 [3.23820908493237, 1.0587479742892683, float] [183, 43.831293356668425, int] 
9 [2.2509032790941985, 0.8896196407231622, float] [66, 35.9377662201882, int] 

我想爲每一列提取每行的列表的第一個位置,以獲得一個DataFrame看起來如下。

Gamma Beta 
0 1.4652917656926299 91 
1 2.6008354611105995 59 
2 2.6386970166722348 89 
... 

到現在爲止,我的解決辦法是像[row[1][0] for row in df_params.itertuples()],我可以遍歷該行的每列索引,然後撰寫我的新數據幀。

另一種方法是new_df = df_params['Gamma'].apply(lambda x: x[0])然後重複遍歷所有列。

我的問題是,執行此操作有沒有一種麻煩的方法?

回答

5

可以使用str訪問的列表,例如:

df_params['Gamma'].str[0] 

這應該適用於所有列:

df_params.apply(lambda col: col.str[0]) 
+1

海峽[0]是好球;) – jezrael

+0

我學到這裏,你或EdChum我不記得了;) – IanS

+1

我瞭解到這個來自DSM) – jezrael

3

Itertuples將是非常緩慢的。你可以用下面的加快這:

for column_name in df_params.columns: 
    df_params[column_name] = [i[0] for i in df_params[column_name]]