pandas 将列表转换为浮点数

4

我应如何将列b和列c转换为float,并扩展列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

请问能否分享一下这个数据框是如何创建的?列 bc 实际上是 list 还是 string - Abdou
@Abdou b和c是列表。 - galaxyan
3个回答

4

以下是两个备选方案:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接