这是我的数据框
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)
有什么建议吗?
答案 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