【问题标题】:Pad a column of strings in a pandas dataframe在熊猫数据框中填充一列字符串
【发布时间】:2018-02-04 05:14:48
【问题描述】:

我有一个 pandas 数据框,在这样的列中包含字符串

 id   b
  1   this is string1
  1   this is string2
  1   this is string3
  1   this is string4

现在我想从 b 列的每个单元格中删除第一个字符 (t)。我还需要在本专栏的开头和结尾添加一个字符s。所以输出应该是这样的

 id   b
  1   shis is string1s
  1   shis is string2s
  1   shis is string3s
  1   shis is string4s

我知道我可以遍历每一行并执行这些操作,但我希望可能有一些有效的方法来执行此操作。也许我可以一次对 b 列的所有单元格应用相同的操作?

【问题讨论】:

    标签: python string pandas dataframe replace


    【解决方案1】:

    df.apply 的更简洁/灵活的方法:

    df.b = df.b.str[1:].apply('s{}s'.format)
    print(df)
    
       id                 b
    0   1  shis is string1s
    1   1  shis is string2s
    2   1  shis is string3s
    3   1  shis is string4s
    

    并且,要仅替换第一次出现的t,请使用pd.Series.str.replace

    df.b = df.b.str.replace('t', '', 1).apply('s{}s'.format)
    print(df)
    
       id                 b
    0   1  shis is string1s
    1   1  shis is string2s
    2   1  shis is string3s
    3   1  shis is string4s
    

    【讨论】:

    • 谢谢,你能告诉我s{}s 是什么意思吗?
    • @asdfkjasdfjk 将用s 包围传递给.format 的任何内容。示例:'s{}s'.format('lol') --> 输出为slols
    【解决方案2】:
    In [6]: df.b = 's' + df.b.str[1:] + 's'
    
    In [7]: df
    Out[7]:
       id                 b
    0   1  shis is string1s
    1   1  shis is string2s
    2   1  shis is string3s
    3   1  shis is string4s
    

    如果您想替换第一次出现的t

    In [14]: df
    Out[14]:
       id              b
    0   1           test
    1   2         a test
    2   3  no occurences
    
    In [15]: df.b = df.b.str.replace('t', '-', n=1)
    
    In [16]: df
    Out[16]:
       id              b
    0   1           -est
    1   2         a -est
    2   3  no occurences
    

    【讨论】:

      【解决方案3】:

      你可以像这样替换第一个和最后一个字符:

      df['b'] = df.b.str.replace('^.|$', 's')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-19
        • 1970-01-01
        • 2019-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-11
        • 1970-01-01
        相关资源
        最近更新 更多