Python 从周数转换为日期时间不工作:";时间数据';201T&x27;与格式不匹配';%Y';(比赛)";
我目前有一个dataframe系列,其输出格式为YWW,其中WW代表工作周 我已将其转换为两个新专栏,一个用于工作周,另一个用于年度,如下所示:Python 从周数转换为日期时间不工作:";时间数据';201T&x27;与格式不匹配';%Y';(比赛)";,python,pandas,Python,Pandas,我目前有一个dataframe系列,其输出格式为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
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
2017年1 | 742 | 42 |
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”不匹配(匹配) 我如何克服这个错误
谢谢你的帮助 您的转换比需要的更复杂。试试这个:
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
您的转换比需要的更复杂。试试这个:
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
如果要将周数乘以7,则必须将周数转换为int。如果你把它们当作字符串来处理,你会一个接一个地得到44 这应该可以
import pandas as pd
data = {'Releasedate':['744','812']}
sndf = pd.DataFrame(data)
derp = pd.DataFrame()
derp['Releasedate'] = sndf['Releasedate'] #releasedate is a string
derp['Week'] = sndf.Releasedate.str.slice(start=1);
derp['Year'] = sndf.Releasedate.str.slice(stop=1);
derp['Year'] = '201' + derp['Year'].astype(str);
derp=derp.dropna()
derp['New'] = pd.to_datetime(derp.Year.astype(str), format='%Y') + \
pd.to_timedelta(derp.Week.astype(int).mul(7).astype(str) + ' days')
如果要将周数乘以7,则必须将周数转换为int。如果你把它们当作字符串来处理,你会一个接一个地得到44 这应该可以
import pandas as pd
data = {'Releasedate':['744','812']}
sndf = pd.DataFrame(data)
derp = pd.DataFrame()
derp['Releasedate'] = sndf['Releasedate'] #releasedate is a string
derp['Week'] = sndf.Releasedate.str.slice(start=1);
derp['Year'] = sndf.Releasedate.str.slice(stop=1);
derp['Year'] = '201' + derp['Year'].astype(str);
derp=derp.dropna()
derp['New'] = pd.to_datetime(derp.Year.astype(str), format='%Y') + \
pd.to_timedelta(derp.Week.astype(int).mul(7).astype(str) + ' days')
@我试着使用
errors='procure'
像这样:derp['New']=pd.to_datetime(derp.Year.astype(str),format='%Y',errors='procure')+\pd.to_timedelta(derp.Week.mul(7.astype(str)+'days')
。但是,它给了我一个溢出错误“OverflowerError:int太大了,无法转换”@ALollz我试着使用errors='concure'
像这样:derp['New']=pd.to_datetime(derp.Year.astype(str),format='%Y',errors='concure')+\pd.to_timedelta(derp.Week.mul(7).astype(str)+'days')
。但是,它给了我一个溢出错误“OverflowerError:int太大,无法转换”,因此,我不知道日期时间是否是问题所在。当我使用示例数据集“data”时,一切都正常工作,即使是我的旧代码。然而,当我使用实际的数据集时,它仍然会给我同样的错误sndf['Releasedate']
是一个由1000个字符串组成的pd系列,所有这些字符串都是一个3位数的数字,就像示例数据集一样,必须查看您正在使用的sndf数据集。你的来源是什么,你是从文件中读取的吗?所以我调查了数据集,主要的问题是,出于某种原因,前几个数字中的一些是字母。一旦我从我的数据集中过滤了所有这些数据,现在一切都正常了。所以,我不知道日期时间是否是问题所在。当我使用示例数据集“data”时,一切都正常工作,即使是我的旧代码。然而,当我使用实际的数据集时,它仍然会给我同样的错误sndf['Releasedate']
是一个由1000个字符串组成的pd系列,所有这些字符串都是一个3位数的数字,就像示例数据集一样,必须查看您正在使用的sndf数据集。你的来源是什么,你是从文件中读取的吗?所以我调查了数据集,主要的问题是,出于某种原因,前几个数字中的一些是字母。一旦我从我的数据集中过滤了所有这些,现在一切都正常了。