【问题标题】:Extract first sequence of strings in pandas column提取 pandas 列中的第一个字符串序列
【发布时间】:2022-11-24 20:24:19
【问题描述】:

我在 DF 中有一列如下

| Column A       |
| ab, bce, bc    |
| bc, abcd, ab   | 
| ab, cd, abc    | 

我想创建一个只采用第一个序列的新列,如下所示

| Column A       | Column B |
| ab, bce, bc    | ab       |
| bc, abcd, ab   | bc       |
| ab, cd, abc    | ab       |

我试过这段代码,但它只给了我第一个序列的第一个字母,而不是整个缩写

df.loc[:, 'ColumnB'] = df.ColumnA.map(lambda x: x[0])

【问题讨论】:

    标签: python pandas columnsorting


    【解决方案1】:

    我猜 columnA 中的项目是字符串,例如'ab, bce, bc',所以只需使用 split ;)。

    df.loc[:, 'ColumnB'] = df.ColumnA.map(lambda x: x.split(',')[0])
    

    【讨论】:

      【解决方案2】:

      您还可以尝试向量化字符串方法 split 并在列表上使用整数索引来获取第一个元素:

      df['Column B'] = df['Column A'].str.split(',').str[0]
      

      应该给

      Column A       Column B 
      ab, bce, bc    ab       
      bc, abcd, ab   bc       
      ab, cd, abc    ab       
      

      【讨论】:

        【解决方案3】:

        你很接近,你只需要在地图之前将字符串转换为带有pandas.Series.split的列表:

        df["Column B"]= df["Column A"].str.split(",").map(lambda x: x[0])
        

        您还可以使用 pandas.Series.get

        df["Column B"]= df["Column A"].str.split(",").str.get(0)
        

        另一种选择是列表理解:

        df["Column B"]= [el[0] for el in df["Column A"].str.split(",")]
        

        # 输出 :

        print(df)
        
               Column A Column B
        0   ab, bce, bc       ab
        1  bc, abcd, ab       bc
        2   ab, cd, abc       ab
        

        【讨论】:

          猜你喜欢
          • 2013-06-12
          • 1970-01-01
          • 2011-10-29
          • 2021-12-06
          • 1970-01-01
          • 1970-01-01
          • 2021-05-26
          • 2021-12-15
          • 2019-03-21
          相关资源
          最近更新 更多