我目前有一个数据框系列,其输出格式为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”(匹配)不匹配
如何克服此错误?
谢谢您的帮助!
答案 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)));