【问题标题】:remove character in series with replace用替换串联删除字符
【发布时间】:2018-11-13 01:00:41
【问题描述】:

我有一个如下所示的系列:

datum

02-jun-18

01-jun-18

01-jun-18

30-maj-18

30-maj-18

29-maj-18

27-maj-18

25-maj-18

25-maj-18

25-maj-18

14-maj-18

我想删除每一行的日期,但使用以下代码保留月份和年份:

df['datum']=df['datum'].replace(df['datum'][0:2],' ') 

但它不起作用。谁能解释我为什么以及如何解决这个问题?

【问题讨论】:

  • 发布您的系列作为文本,而不是作为图像。
  • @chrisz 我已经编辑了我的文本,这样更好吗?

标签: python python-3.x pandas replace series


【解决方案1】:

您可以使用str.split

pd.Series(['18 may 2018','10 jun 2018']).str.split(' ',1).str[1]
Out[209]: 
0    may 2018
1    jun 2018
dtype: object

【讨论】:

    【解决方案2】:

    df['datum'].replace(df['datum'][0:2],' ') 会将前两个 替换为空格,而不是每行中的前两个字母。你想和df.datum.str一起工作

    选项 1(如果所有月份都是三个字母的缩写)
    string slicing

    df.datum.str[-8:]
    
    0    jun 2018
    1    jun 2018
    2    maj 2018
    Name: datum, dtype: object
    

    选项 2
    str.replace.*\s(\w+\s\w+)$

    df.datum.str.replace(r'.*\s(\w+\s\w+)$', r'\1')
    
    0    jun 2018
    1    jun 2018
    2    maj 2018
    Name: datum, dtype: object
    

    【讨论】:

    • 问题的第一部分:“谁能解释为什么...”。我也很好奇。
    • HI 尝试将前两个 替换为 ' '。他的意思可能是df.datum.str.replace,但由于天数可变,无论哪种方式都行不通,你也不能散列系列。
    • @chrisz 感谢您的回答。一个问题,选项2中调用的方法.*\s(\w+\s\w+)$是什么?
    • 调用正则表达式匹配。
    • @chrisz 好的,再次感谢您的回答。我还尝试了另一种方法来解决我的问题。选项 3 是 df['datum']=df['datum'].replace(df['datum'][0][0:2],' ') 我不知道这是否正确,但是它也有效。
    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 2017-07-26
    • 2015-05-08
    • 1970-01-01
    • 2014-02-24
    • 2021-12-19
    • 2020-05-11
    • 1970-01-01
    相关资源
    最近更新 更多