Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将列表值拆分为列:python_Python_Pandas_Dataframe - Fatal编程技术网

将列表值拆分为列:python

将列表值拆分为列: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

我正在尝试将中的行值转换为列需要将值提取到单独的列中,尝试了多种方法。在此处发布的任何更好的解决方案似乎都没有达到预期效果。

不确定这是最佳选项,但我使用正则表达式: (假设您的最后一列总是看起来像“[index 12 Score 0.14788]”)


您的输入数据帧和结果:


解释如下:

我为您的
专栏使用了
.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