2017-04-25 50 views
2

如何將列b和列c轉換爲浮點數並將列b轉換爲兩列。熊貓將列表轉換爲浮點數

實施例數據幀:

a        b    c 
0 36 [-212828.804308, 100000067.554] [-3079773936.0] 
1 39 [-136.358761948, -50000.0160325] [1518911.64408] 
2 40 [-136.358761948, -50000.0160325] [1518911.64408] 

預期:

a  b1     b2    c 
0 36 -212828.804308 100000067.554 -3079773936.0 
1 39 -136.358761948, -50000.0160325 1518911.64408 
2 40 -136.358761948, -50000.0160325 1518911.64408 
+0

你能分享一下數據框是如何創建的嗎?列「b」和「c」實際上是「列表」還是「字符串」? – Abdou

+0

@Abdou b和c是列表 – galaxyan

回答

2

這裏有兩種選擇:

1)轉換的列的列表然後構造從頭數據幀:

pd.concat((df['a'], pd.DataFrame(df['b'].tolist()), pd.DataFrame(df['c'].tolist())), axis=1) 
Out: 
    a    0    1    0 
0 36 -212828.804308 1.000001e+08 -3.079774e+09 
1 39 -136.358762 -5.000002e+04 1.518912e+06 
2 40 -136.358762 -5.000002e+04 1.518912e+06 

或者在一個循環:

pd.concat((pd.DataFrame(df[col].tolist()) for col in df), axis=1) 
Out: 
    0    0    1    0 
0 36 -212828.804308 1.000001e+08 -3.079774e+09 
1 39 -136.358762 -5.000002e+04 1.518912e+06 
2 40 -136.358762 -5.000002e+04 1.518912e+06 

2)應用pd.Series到每一列(可能較慢):

pd.concat((df[col].apply(pd.Series) for col in df), axis=1) 
Out: 
    0    0    1    0 
0 36 -212828.804308 1.000001e+08 -3.079774e+09 
1 39 -136.358762 -5.000002e+04 1.518912e+06 
2 40 -136.358762 -5.000002e+04 1.518912e+06 
2

構建從 'b' 和下拉 'B' 的新列。 'c'列可以替換。

df[['b1','b2']] = pd.DataFrame([x for x in df.b]) # new b1,b2 
df.drop('b',axis=1,inplace=True) # drop b 
df['c'] = pd.DataFrame([x for x in df.c]) # remove list from c 
2

我從@ayhan擴展解決方案,以防萬一您還想重命名列名稱。 請注意,我假設每列都有相同長度的列表。

col_names = [] 
for col in df.columns: 
    if df[col].dtype == 'O' and len(df[col].iloc[0]) > 1: 
     col_names.extend([col + str(i + 1) for i in range(len(df[col].iloc[0]))]) 
    else: 
     col_names.extend([col]) 

df_new = pd.concat([df[col].apply(pd.Series) for col in df], axis=1) 
df_new.columns = col_names 
相關問題