【问题标题】:How to keep the delimiters by using df.str.split() with multipe delimiters如何通过使用带有多个分隔符的 df.str.split() 来保留分隔符
【发布时间】:2019-11-03 06:27:42
【问题描述】:

我一直在使用的数据框有一列指示带有时区的日期时间,例如:2019-01-23T04:30:00+01:00。

                    Horodate
0  2019-01-23T04:30:00+01:00
1  2019-01-23T04:30:00+01:00
2  2019-01-23T04:30:00+01:00
3  2019-01-23T04:30:00-01:00

我想获取时区信息并将其放入另一个名为“TimeZone”的列中。我可以通过应用这个函数来做到这一点:

df["TimeZone"] = "+"  + df["Horodate"].str.split('[+]').str[1] 

效果很好:

                    Horodate TimeZone
0  2019-01-23T04:30:00+01:00   +01:00
1  2019-01-23T04:30:00+01:00   +01:00
2  2019-01-23T04:30:00+01:00   +01:00
3  2019-01-23T04:30:00-01:00      NaN

但它仅对以“+”开头的时区有效。我想找到一种方法来提取有关时区的全部信息,包括信号“+”或“-”并获得一个看起来像这样的数据框:

                    Horodate TimeZone
0  2019-01-23T04:30:00+01:00   +01:00
1  2019-01-23T04:30:00+01:00   +01:00
2  2019-01-23T04:30:00+01:00   +01:00
3  2019-01-23T04:30:00-01:00   -01:00

我想我必须通过拆分多个分隔符,但问题是,如何在需要拆分字符串的同时包含分隔符? 我可以像这样切片字符串得到一个很好的结果:

df_test["TimeZone"] =  df_test["Horodate"].str[19:] 

但这不是一种通用的方法。 提前致谢。

【问题讨论】:

    标签: python string pandas split


    【解决方案1】:

    str.sub 允许使用正则表达式,所以你可以这样做:

    df['Timezone'] = df.Horodate.str.replace('(.*)([+-])(.*)', r'\2\3')
    

    【讨论】:

      【解决方案2】:

      您还可以将Series.str.extractregex 模式一起使用:

      df['TimeZone'] =  df['Horodate'].str.extract(r'([+-]\d{2}:\d{2})')
      

      [出]

                          Horodate TimeZone
      0  2019-01-23T04:30:00+01:00   +01:00
      1  2019-01-23T04:30:00+01:00   +01:00
      2  2019-01-23T04:30:00+01:00   +01:00
      3  2019-01-23T04:30:00-01:00   -01:00
      

      【讨论】:

        【解决方案3】:

        字符串切片怎么样?

        In [285]: df["TimeZone"] = df["Horodate"].str[-6:] 
        
        In [286]: df
        Out[286]: 
                            Horodate TimeZone
        0  2019-01-23T04:30:00+01:00   +01:00
        1  2019-01-23T04:30:00+01:00   +01:00
        2  2019-01-23T04:30:00+01:00   +01:00
        3  2019-01-23T04:30:00-01:00   -01:00
        

        【讨论】:

          猜你喜欢
          • 2019-05-11
          • 2015-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-23
          • 1970-01-01
          • 2017-12-02
          • 1970-01-01
          相关资源
          最近更新 更多