Pandas 熊猫:比较两个日期,如果两个日期都是日期,那么日期-日期=天
我有两个专栏Pandas 熊猫:比较两个日期,如果两个日期都是日期,那么日期-日期=天,pandas,Pandas,我有两个专栏 AnalyseDatum_calc erstellt am 0 05.01.2015 31.10.2014 1 SN not found 07.01.2015 2 05.01.2015 31.10.2014 3 05.01.2015 SN not found 4 05.01.2015 SN not found 5 05.01.2015 07.0
AnalyseDatum_calc erstellt am
0 05.01.2015 31.10.2014
1 SN not found 07.01.2015
2 05.01.2015 31.10.2014
3 05.01.2015 SN not found
4 05.01.2015 SN not found
5 05.01.2015 07.01.2015
6 SN not found 31.10.2014
7 SN not found 07.01.2015
8 05.01.2015 09.12.2014
我想解释一下,如果两列中都是date,那么date-date=days
这是formel:
df4['Tage SM-Analyse_helper'] = np.where(((df4['AnalyseDatum_calc'] != 'SN not found') & (df4['erstellt am'] != 'SN not found')), (pd.to_datetime(df4['AnalyseDatum_calc'], format='%d.%m.%Y') - pd.to_datetime(df4['erstellt am'], format='%d.%m.%Y')).dt.days,'NOK')
我得到一个错误:
ValueError: time data 'SN not found' does not match format '%d.%m.%Y' (match)
ValueError: invalid literal for int() with base 10: '-'
我做错了什么?
非常感谢您的帮助您可以使用pd.to_datetime with errors='concurve'选项:
输出:
0 66 days
1 NaT
2 66 days
3 NaT
4 NaT
5 -2 days
6 NaT
7 NaT
8 27 days
dtype: timedelta64[ns]
您可以使用pd.to_datetime with errors='concurve'选项:
输出:
0 66 days
1 NaT
2 66 days
3 NaT
4 NaT
5 -2 days
6 NaT
7 NaT
8 27 days
dtype: timedelta64[ns]
请尝试以下方法:
作为pd进口熊猫
将日期时间导入为dt
def validate_dateinp,date_格式:
尝试:
返回dt.datetime.strptimeinp,日期\格式
除值错误外:
一无所获
数据={
“分析计算”:[2015年1月5日”,“未找到序列号”,“2015年1月5日”,“2015年1月5日”,“2015年1月5日”,“2015年1月5日”,“未找到序列号”,“2015年1月5日],
“erstellt am”:[2014年10月31日”,“2015年1月7日”,“2014年10月31日”,“未找到序列号”,“未找到序列号”,“2015年1月7日”,“2014年10月31日”,“2015年1月7日”,“2014年12月9日],
}
df=pd.DataFramedata
df['date_diff']=df['Analysistatum_calc']。applylambda x:validate_datex,%d.%m.%Y'-df['erstellt am']。applylambda x:validate_datex,%d.%m.%Y'
请尝试以下方法:
作为pd进口熊猫
将日期时间导入为dt
def validate_dateinp,date_格式:
尝试:
返回dt.datetime.strptimeinp,日期\格式
除值错误外:
一无所获
数据={
“分析计算”:[2015年1月5日”,“未找到序列号”,“2015年1月5日”,“2015年1月5日”,“2015年1月5日”,“2015年1月5日”,“未找到序列号”,“2015年1月5日],
“erstellt am”:[2014年10月31日”,“2015年1月7日”,“2014年10月31日”,“未找到序列号”,“未找到序列号”,“2015年1月7日”,“2014年10月31日”,“2015年1月7日”,“2014年12月9日],
}
df=pd.DataFramedata
df['date_diff']=df['Analysistatum_calc']。applylambda x:validate_datex,%d.%m.%Y'-df['erstellt am']。applylambda x:validate_datex,%d.%m.%Y'
df4['Tage SM-analysis_helper']=pd.to_datetimedf4['analysistum_calc'],dayfirst=True,errors='concurve'-pd.to_datetimedf4['erstellt am'],dayfirst=True,errors='concurve'/np.timedelta641,'Y'.fillna'-' 我得到的结果是十进制的,我想转换成整数,然后转换成字符串的concate 问题是有一些NaT值
df4['TIS_3 Jahre'] = np.where(df4['Tage SM-Analyse_helper'].astype(str)== '-' ,'-' , (df4['Tage SM-Analyse_helper'].astype(str)+'-'+(df4['Tage SM-Analyse_helper'].astype(int)+1).astype(str)+' Year'))
结果应为2-4年
我得到一个错误:
ValueError: time data 'SN not found' does not match format '%d.%m.%Y' (match)
ValueError: invalid literal for int() with base 10: '-'
df4['Tage SM-analysis_helper']=pd.to_datetimedf4['analysistum_calc'],dayfirst=True,errors='concurve'-pd.to_datetimedf4['erstellt am'],dayfirst=True,errors='concurve'/np.timedelta641,'Y'.fillna'-' 我得到的结果是十进制的,我想转换成整数,然后转换成字符串的concate 问题是有一些NaT值
df4['TIS_3 Jahre'] = np.where(df4['Tage SM-Analyse_helper'].astype(str)== '-' ,'-' , (df4['Tage SM-Analyse_helper'].astype(str)+'-'+(df4['Tage SM-Analyse_helper'].astype(int)+1).astype(str)+' Year'))
结果应为2-4年
我得到一个错误:
ValueError: time data 'SN not found' does not match format '%d.%m.%Y' (match)
ValueError: invalid literal for int() with base 10: '-'
我还需要“NOK”如果Natchain有。fillna“NOK”。很好,最后一个问题,我得到66天00:00:00,但我只想要66天。我怎样才能只得到66pd.to_datetimedf4['analysistatum\u calc'],dayfirst=True,errors='concurve'-pd.to_datetimedf4['erstellt am'],dayfirst=True,errors='concurve'/np.timedelta641,'D'。请看我下面的评论,谢谢。ValueError:以10为底的int的文本无效:'-'如果Natchain以.fillna'NOK为底,我还需要'NOK'。很好,最后一个问题,我得到66天00:00:00,但我只想要66天。我怎样才能只得到66pd.to_datetimedf4['analysistatum\u calc'],dayfirst=True,errors='concurve'-pd.to_datetimedf4['erstellt am'],dayfirst=True,errors='concurve'/np.timedelta641,'D'。请看我下面的评论,谢谢。ValueError:基数为10的int的文本无效:'-'