显然,你有你的日期(在一个输入文件中)的格式。 不同的方式。
你的一个评论包含Timestamp('2014-12-02 00:00:00')
。
所以我看到你有%Y-%m-%d格式化(可能在大多数情况下)。
但在另一个地方,你写了time data '12/2/2014'
,所以至少
在某些行中,你有%d/%m/%Y格式化。
使你的输入有秩序。你不能让日期的格式有两个 不同的格式。
I performed the following experiment:
作为源数据,我使用了你的原始数据的一部分(前2行和后2行)。 额外的行(第3行)有不同的日期格式。 存储为一个字符串变量。
transaction_id cust_id tran_date prod_subcat_code prod_cat_code Qty Rate Tax total_amt Store_type
3 93274880719 271509 24-02-2014 11 6 -3 -1363 429.345 -4518.345 e-Shop
4 51750724947 273420 23-02-2014 6 5 -2 -791 166.110 -1748.110 TeleShop
40 51750724947 273420 12/2/2014 6 5 -2 -791 166.110 -1748.110 TeleShop
23048 94340757522 274550 25-01-2011 12 5 1 1264 132.720 1396.720 e-Shop
23049 89780862956 270022 25-01-2011 4 1 1 677 71.085 748.085 e-Shop'''
注意,初始行在开始时有一些空格,以提供
索引列的空列名。
然后我定义了以下日期解析函数(import re
需要)。
将很快被使用。
def dPars(txt):
if re.match(r'\d{2}-\d{1,2}-\d{4}', txt):
return pd.to_datetime(txt, format='%d-%m-%Y')
if re.match(r'\d{2}/\d{1,2}/\d{4}', txt):
return pd.to_datetime(txt, format='%d/%m/%Y')
return txt
我看了上面的内容,有上面的日期转换功能。
customer_final = pd.read_csv(io.StringIO(txt), delim_whitespace=True,
index_col=0, parse_dates=['tran_date'], date_parser=dPars)
I printed 转载_日期 column - print(customer_final.tran_date)
- getting
3 2014-02-24
4 2014-02-23
40 2014-02-12
23048 2011-01-25
23049 2011-01-25
Name: tran_date, dtype: datetime64[ns]
因此,所有的日期都被解析为它们应该是的。
我打印了最小/最大日期 - 【替换代码8- 得到了正确的结果。
2011-01-25 00:00:00 2014-02-24 00:00:00
也许你应该以我的实验为基础编写你的代码(在你的代码中用你的输入文件名代替
替换代码10】为你的输入文件名)。
还要注意的是,如果你有一些输入行的格式为12/2/2014
,那么
12 is the month数和2 is the 日 number (US date format),
whereas other rows have the 日 number first.