如何将列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 :(得分: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