如何在具有特定分隔符位置的熊猫中将列拆分为多列?

时间:2019-01-16 11:37:20

标签: python pandas

这是我的数据框

                    df_test
0   (-, 136), (-, 136), 1.0
1   (-, 136), (-, 438), 0.5
2   (-, 136), (-, 257), 0.5

我希望看到这样的结果

      df_t1   df_t2  df_val
0   (-, 136) (-, 136) 1.0
1   (-, 136) (-, 438) 0.5
2   (-, 136) (-, 257) 0.5

我已经使用了这段代码,但是它不起作用

new_df[['df_t1', 'df_t2', 'df_val']] = new_df['df_test'].str.split(',',expand=True)

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

特定于您的格式,您可以使用ast.literal_eval。更好的做法是,在构建数据框之前 尝试解决上游问题。

from ast import literal_eval

df = pd.DataFrame({'df_test': ['(-, 136), (-, 136), 1.0',
                               '(-, 136), (-, 438), 0.5',
                               '(-, 136), (-, 257), 0.5']})

series = df.pop('df_test').str.replace('-', '"-"').apply(literal_eval)
df = df.join(pd.DataFrame(series.values.tolist(), columns=['df_t1', 'df_t2', 'df_val']))

print(df)

      df_t1     df_t2  df_val
0  (-, 136)  (-, 136)     1.0
1  (-, 136)  (-, 438)     0.5
2  (-, 136)  (-, 257)     0.5

答案 1 :(得分:0)

使用:

new_df[['df_t1', 'df_t2', 'df_val']] = new_df['df_test'].str.rsplit('),', expand=True)
new_df[['df_t1', 'df_t2']] += ')' 
print (new_df)
                   df_test     df_t1      df_t2 df_val
0  (-, 136), (-, 136), 1.0  (-, 136)   (-, 136)    1.0
1  (-, 136), (-, 438), 0.5  (-, 136)   (-, 438)    0.5
2  (-, 136), (-, 257), 0.5  (-, 136)   (-, 257)    0.5