2017-04-25 16 views
2

どのようにして列bと列cを浮動小数点に変換し、列bを2列にすることもできます。pandasをリストを浮動小数点に変換する

例のデータフレーム:予想

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'は実際に 'list'か' string'ですか? – 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 
関連する問題