开发者社区> 问答> 正文

使用R或python将列拆分为多个列

我有一个这样的值,我想把它分成多个列

[['Alonso, O.', 'Mizzaro, S.'], ['Gao, H.', 'Barbier, G.', 'Goolsby, R.']]

我只是想要这个值

'Alonso, O' 'Mizzaro, S' 'Gao, H' 'Barbier, G' 'Goolsby, R'

怎么用R或Python中的正则表达式来做呢? 问题来源StackOverflow 地址:/questions/59384836/split-column-to-multiple-columns-by-using-r-or-python

展开
收起
kun坤 2019-12-26 14:29:02 490 0
1 条回答
写回答
取消 提交回答
  • 在R: 第一部分 我假设这个值是一个向量中的字符值。 所以,我把你的值装入一个向量,像这样:

    char <- "[['Alonso, O.', 'Mizzaro, S.'], ['Gao, H.', 'Barbier, G.', 'Goolsby, R.']]"
    

    然后,如果你想把它们分成单独的名字,产生一个包含五个名字作为单独值的向量,你可以这样做:

    char %>% 
      str_replace_all("'|\\[|\\]", "") %>% 
      str_split("\\., ") %>% 
      unlist()
    

    输出:

    [1] "Alonso, O"   "Mizzaro, S"  "Gao, H"      "Barbier, G"  "Goolsby, R."
    

    它的作用是: 1. 使用字符串“'|[|]”删除所有“s”、['s和]'s。方括号需要转义,因此需要双;|是OR 2. 基于字符串分割”。”。在本例中,字符串中的点需要转义,因为我们希望将其用作常规点,而不是特殊字符点。 3.取消列表,在本例中为包含五个名称的向量。 为此,我使用了来自tidyverse的两个包,因此请确保将tidyverse作为一个整体安装和加载,或者至少安装stringr和magrittr 第二部分 其次,我注意到你在你的标题中提到了把它分成几栏。 如果这是一个变量中的值,需要分成5列中的5个值,您可以使用类似这样的东西。

    char %>% 
      enframe(name = NULL) %>% 
      mutate(value = str_replace_all(value, "'|\\[|\\]", "")) %>% 
      separate(value, into = c("name1", "name2", "name3", "name4", "name5"), sep = "\\., ")
    

    输出:

    # A tibble: 1 x 5
      name1     name2      name3  name4      name5      
      <chr>     <chr>      <chr>  <chr>      <chr>      
    1 Alonso, O Mizzaro, S Gao, H Barbier, G Goolsby, R.
    

    这段代码解释道: 1. 将字符向量转换为tibble,在本例中,将字符值放在名为“value”的变量中(默认名称) 2. 同样是第一部分的第1步,删除“s”、“['s '和's ',但这次是作为mutate调用的一部分 3.您现在使用的是separate,而不是str_split,它将一个列中的值分隔为多个列上的不同值。您必须提供一些列名,您认为您的值将被分割到其中(“into =”参数),以及要分割的字符串(与第一部分中的步骤2相同的字符串)。 为此,您需要另外三个tidyverse包:tibble、dplyr和tidyr

    2019-12-26 14:29:11
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载