【问题标题】:Replacing a substring with another substring pandas python用另一个子字符串替换一个子字符串 pandas python
【发布时间】:2014-12-23 09:23:11
【问题描述】:

我有一个数据框,df.

如果是 /,我想将最后一个字符的第 7 到第 5 个字符替换为 0:

df['StartDate'].str[-7:-5]=df['StartDate'].str[-7:-5].str.replace('/', '0')

返回错误:

TypeError: 'StringMethods' object does not support item assignment

数据如下:

number                 StartDate     EndDate  Location_Id      Item_Id        xxx          yyy\
3                460    4/1/2012   4/11/2012         2502   3890004215         0            0
28              2731  10/17/2013  10/30/2013         3509   5100012114         0            0
34              1091   1/10/2013   1/23/2013         2544   5100012910         0            0
134             1630    5/2/2013   5/15/2013         2506  69511912000         0            0
138              327   1/12/2012   1/25/2012         5503   1380016686

【问题讨论】:

  • 你能举一个小例子来说明你的数据实际上是什么样的吗?最好只打印该系列的前 10 个项目
  • 谢谢。您的替换操作是否基本上试图确保每个日期中的日期都是零填充的,所以4/1/2012 -> 4/01/2012?你想达到什么日期格式?
  • 完全正确,我实际上希望它们采用日期时间格式。但我认为您不能将日期时间对象存储在数据框的单元格中,所以我认为 20120401 将是存储它的最简单方法,但是一旦我从 / 中获得 0,我就可以完成其余的工作。跨度>
  • Pandas 实际上有内置的日期时间支持,你可以做df['StartDate'] = pd.to_datetime(df['StartDate']),然后通过df.StartDate.dt.<methods> 访问日期时间方法(尽管.dt 部分可能只有在你使用v0.15 时才有效熊猫)
  • 您先生,为我节省了大量时间,真是神。回答,我会给你最好的。

标签: python string pandas substring


【解决方案1】:

Pandas 内置了对 datetime 对象的支持(pandas 可能有自己的实现,而不是直接使用标准库的,但想法是一样的),所以不要尝试使用字符串方法重新格式化日期,而是转换为 @987654322 @ 更容易:

df['StartDate'] = pd.to_datetime(df['StartDate'])

转换后,您可以通过.dt 访问器获取一些与日期时间对象相关的易于使用的方法(可能是最近在 v0.15 中添加的):

df.StartDate.dt.month
Out[20]: 
3       4
28     10
34      1
134     5
138     1
dtype: int64

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 2011-06-06
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多