将列表值拆分为列:python
我正在尝试将中的行值转换为列需要将值提取到单独的列中,尝试了多种方法。在此处发布的任何更好的解决方案似乎都没有达到预期效果。不确定这是最佳选项,但我使用正则表达式: (假设您的最后一列总是看起来像“[index 12 Score 0.14788]”)将列表值拆分为列:python,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试将中的行值转换为列需要将值提取到单独的列中,尝试了多种方法。在此处发布的任何更好的解决方案似乎都没有达到预期效果。不确定这是最佳选项,但我使用正则表达式: (假设您的最后一列总是看起来像“[index 12 Score 0.14788]”) 您的输入数据帧和结果: 解释如下: 我为您的专栏使用了.str.extact()系列方法: col_x index Score 0 msg1 12 0.147880 1 msg2 4 0.002986
您的输入数据帧和结果:
解释如下: 我为您的
专栏使用了.str.extact()
系列方法:
col_x index Score
0 msg1 12 0.147880
1 msg2 4 0.002986
使用模式
(正则表达式)
其中有两个捕获组:
(\d+)
用于索引的值
(.+)
对于分数的值
因此,.str.extract()
创建了一个包含两列的新数据框-每个捕获组一列
然后我
- 将其与原始数据帧的第一列合并:
\[index\s+(\d+)\s+Score\s+(.+)]
- 重命名提取的列:
input_df[["col_x"]].join(input_df.col_y.str.extract(pattern)) ,
- 已更改其数据类型:
.rename({0: "index", 1: "Score"}, axis=1)
在代码中发布演示df。将您尝试的内容作为代码发布。@PatrickArtner添加了演示代码。谢谢@Pauline。给出的解决方案简单易懂。继续做你的伟大工作!快乐学习
col_x col_y
0 msg1 [index 12 Score 0.14788]
1 msg2 [index 4 Score 0.002986]
In [4]: output_df
col_x index Score
0 msg1 12 0.147880
1 msg2 4 0.002986
input_df.col_y.str.extract(pattern)
\[index\s+(\d+)\s+Score\s+(.+)]
input_df[["col_x"]].join(input_df.col_y.str.extract(pattern)) ,
.rename({0: "index", 1: "Score"}, axis=1)
.astype({"index": int, "Score": float})
In [5]: output_df.dtypes
col_x object
index int32
Score float64
dtype: object