pandas将列表转换为float

时间:2017-04-25 23:49:57

标签: python pandas

如何将列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

3 个答案:

答案 0 :(得分:3)

以下是两种选择:

1)将列转换为列表,然后从头构建DataFrame:

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

答案 1 :(得分:2)

从'b'和drop'b'构造新列。列'c'可以替换为inplace。

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 :(得分:2)

我从@ayhan扩展解决方案,以防你想要重命名列名,以防你有多列。 请注意我假设每列都有相同长度的列表。

Array