从星期数转换为日期时间不起作用:“时间数据'201T'与格式'%Y'不匹配(匹配)”

时间:2019-11-06 14:57:13

标签: python pandas

我目前有一个数据框系列,其输出格式为YWW,WW代表工作周。

我已经将其转换为两个新列,其中一个用于工作周,另一个用于年度,就像这样:

derp = pd.DataFrame();
derp['Releasedate'] = sndf['Releasedate'] #releasedate is a string
derp['Week'] = sndf.Releasedate.str.slice(start=4);
derp['Year'] = sndf.Releasedate.str.slice(stop=4);
derp['Year'] = '201' + derp['Year'].astype(str);
derp=derp.dropna()

给我一​​个具有以下输出的数据框:

__ |发布日期|周|年份
0 | 728 | 28 | 2017
1 | 742 | 42 | 2017
2 | 920 | 20 | 2019
3 | 813 | 13 | 2008

但是,当我尝试使用以下代码将其转换为datetime时

derp['New'] = pd.to_datetime(derp.Year.astype(str), format='%Y') + \
             pd.to_timedelta(derp.Week.mul(7).astype(str) + ' days')

它给了我以下错误:
ValueError:时间数据“ 201T”与格式“%Y”(匹配)不匹配

如何克服此错误?

谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您的转换比所需的还要复杂。试试这个:

derp['New'] = pd.to_datetime(derp['Year'], format='%Y') \
                + pd.to_timedelta(derp['Week'].mul(7), unit='d')

结果:

2017-07-16
2017-10-22
2019-05-21
2008-04-01

答案 1 :(得分:0)

如果要将周数乘以7,则必须将周数转换为int。如果将它们作为字符串来使用,则您会得到7个44的值。

这应该做

const config = {
  articles: {
    rojak_daily: { // Publisher 1
      url: 'xxx',
      url_feed: 'rss',
      id: null,
      Name: 'title',
      Description: 'description',
      Link: 'link',
      DatePublishFrom: 'pubDate',
      LandscapeImage: 's3image',
      SiteName: 'Rojak Daily',
      SiteLogo: null
    },
    rojak_weekly: { // publisher 2
      url: 'xxx',
      url_feed: 'json',
      id: null,
      Name: 'Name',
      Description: 'Desc',
      Link: 'link',
      DatePublishFrom: 'pubDate',
      LandscapeImage: 's3image',
      SiteName: 'Rojak Weekly',
      SiteLogo: null
    }
  }
}

const publishers = ['rojak_daily', 'rojak_weekly']

function getFeedType(publisher) {
  return config.articles[publisher].url_feed; 
}

publishers.forEach(publisher => console.log(getFeedType(publisher)));