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的文本无效:'-'