python中的日期时间比较

时间:2015-07-23 02:39:27

标签: python numpy pandas

我有一个包含两个不同日期的文件:一个有时间戳,一个没有。我需要读取文件,忽略时间戳,并比较两个日期。如果两个日期相同,那么我需要将它吐出到输出文件并忽略任何其他行。 我无法知道我是否应该在输入上使用日期时间函数并在那里格式化日期,然后只是看看两者是否相同?或者我应该使用timedelta?

我尝试了几种不同的方法,但没有取得成功。

df = pd.read_csv("File.csv", dtype={'DATETIMESTAMP': np.datetime64, 'DATE':np.datetime64})

给我:TypeError:dtype<解析不支持M8,而是使用parse_dates传递此列

我还试图删除时间戳然后比较,但字符串最终会有不同的日期格式,但也不起作用。

df['RemoveTimestamp'] = df['DATETIMESTAMP'].apply(lambda x: x[:10])
df = df[df['RemoveTimestamp'] == df['DATE']]

任何指导意见。

以下是我的示例输入CSV文件:

"DATE", "DATETIMESTAMP"

"8/6/2014","2014-08-06T10:18:38.000Z"
"1/15/2013","2013-01-15T08:57:38.000Z"
"3/7/2013","2013-03-07T16:57:18.000Z"
"12/4/2012","2012-12-04T10:59:37.000Z"
"5/6/2014","2014-05-06T11:07:46.000Z"
"2/13/2013","2013-02-13T15:51:42.000Z"

2 个答案:

答案 0 :(得分:2)

import pandas as pd
import numpy as np


# your data, both columns are in string
# ================================================
df = pd.read_csv('sample_data.csv')

df

        DATE             DATETIMESTAMP
0   8/6/2014  2014-08-06T10:18:38.000Z
1  1/15/2013  2013-01-15T08:57:38.000Z
2   3/7/2013  2013-03-07T16:57:18.000Z
3  12/4/2012  2012-12-04T10:59:37.000Z
4   5/6/2014  2014-05-06T11:07:46.000Z
5  2/13/2013  2013-02-13T15:51:42.000Z


# processing
# =================================================
# convert string to datetime
df['DATE'] = pd.to_datetime(df['DATE'])
df['DATETIMESTAMP'] = pd.to_datetime(df['DATETIMESTAMP'])

# cast timestamp to date
df['DATETIMESTAMP'] = df['DATETIMESTAMP'].values.astype('<M8[D]')

        DATE DATETIMESTAMP
0 2014-08-06    2014-08-06
1 2013-01-15    2013-01-15
2 2013-03-07    2013-03-07
3 2012-12-04    2012-12-04
4 2014-05-06    2014-05-06
5 2013-02-13    2013-02-13


# compare
df['DATE'] == df['DATETIMESTAMP']

0    True
1    True
2    True
3    True
4    True
5    True
dtype: bool

答案 1 :(得分:0)

怎么样:

import time
filename = dates.csv
with open(filename) as f:
    contents = f.readlines()

for i in contents:
    date1, date2 = i.split(',')
    date1 = date1.strip('"')
    date2 = date2.split('T')[0].strip('"')
    date1a = time.strftime("%Y-%m-%d",time.strptime(date1, "%m/%d/%Y"))
    print i if date1a == date2 else None