我写了一段代码来读取多个文件,但是在一些文件中,当日期小于13时,日期和月份会交换,而任何大于等于13的日期,例如13/06/11,都保持正确(DD/MM/YY)。 我尝试通过以下方式修复它,但它不起作用。
我的数据框看起来像这样: 实际日期从2015年6月12日到2015年6月13日 当我将我的日期时间列读取为字符串时,日期保持正确dd/mm/yyyy
tmp p1 p2
11/06/2015 00:56:55.060 0 1
11/06/2015 04:16:38.060 0 1
12/06/2015 16:13:30.060 0 1
12/06/2015 21:24:03.060 0 1
13/06/2015 02:31:44.060 0 1
13/06/2015 02:37:49.060 0 1
但是当我将列的数据类型更改为日期时间列时,对于小于13号的每一天,我的日期和月份会互换。
输出:
print(df)
tmp p1 p2
06/11/2015 00:56:55 0 1
06/11/2015 04:16:38 0 1
06/12/2015 16:13:30 0 1
06/12/2015 21:24:03 0 1
13/06/2015 02:31:44 0 1
13/06/2015 02:37:49 0 1
这是我的代码:
我循环遍历文件:
df = pd.read_csv(PATH+file, header = None,error_bad_lines=False , sep = '\t')
当我的代码完成读取所有文件后,我将它们连接起来。问题是我的日期时间列需要是datetime类型,所以当我使用pd_datetime()更改其类型时,如果日期小于13号,它会交换日期和月份。
在转换完我的日期时间列后,日期是正确的(字符串类型)。
print(tmp) # as a result I get 11.06.2015 12:56:05 (11june2015)
但是当我更改列类型时,会出现以下情况:
tmp = pd.to_datetime(tmp, unit = "ns")
tmp = temps_absolu.apply(lambda x: x.replace(microsecond=0))
print(tmp) # I get 06-11-2016 12:56:05 (06november2015 its not the right date)
问题是:当日期小于13时,我应该使用或更改哪个命令以停止日期和月份的交换? 更新:此命令交换了我的列中所有的日期和月份。
tmp = pd.to_datetime(tmp, unit='s').dt.strftime('%#m/%#d/%Y %H:%M:%S')
因此,为了仅交换错误的日期,我编写了一个条件:
for t in tmp:
if (t.day < 13):
t = datetime(year=t.year, month=t.day, day=t.month, hour=t.hour, minute=t.minute, second = t.second)
但这也不起作用。