Python 在csv从YYYY-MM-DD到DD/MM/YY的中途以及切换日期时间后,日期更改不再有效

Python 在csv从YYYY-MM-DD到DD/MM/YY的中途以及切换日期时间后,日期更改不再有效,python,pandas,csv,date,datetime,Python,Pandas,Csv,Date,Datetime,我有一个包含3列的每日温度数据的csv:日期、每日最高温度和每日最低温度。我把它贴在这里,让你明白我的意思 我试图将这个数据集分解为30年期的较小数据集。对于Old.csv的前几年,日期输入为YYYY-MM-DD,但在1900年切换为DD/MM/YY。在此日期之后,格式将我的代码切换为拆分年份,不再有效。以下是我正在使用的: df2 = pd.read_csv("Old.csv") test = df2[ (pd.to_datetime(df2['Date']) >

我有一个包含3列的每日温度数据的csv:日期、每日最高温度和每日最低温度。我把它贴在这里,让你明白我的意思

我试图将这个数据集分解为30年期的较小数据集。对于Old.csv的前几年,日期输入为YYYY-MM-DD,但在1900年切换为DD/MM/YY。在此日期之后,格式将我的代码切换为拆分年份,不再有效。以下是我正在使用的:

df2 = pd.read_csv("Old.csv")

test = df2[
    (pd.to_datetime(df2['Date']) >
        pd.to_datetime('1897-01-01')) &
    (pd.to_datetime(df2['Date']) <
        pd.to_datetime('1899-12-31'))
]

在运行上面的代码之前重新格式化整个列表,但仍然不起作用。另一件有趣的事情是,我有一个单独的csv,日期始终输入为MM/DD/YY,其中一个使用上述代码。这会是世纪之交的问题吗?有人知道如何解决这个问题吗

您正在处理不同格式的时间/日期数据,为此,您可以使用更灵活的解析器,例如
dateutil.parser

例如:

>>> from dateutil.parser import parse
>>> df
         Date
0  1897-01-01
1  1899-12-31
2    01/01/00

>>> df.Date.apply(parse)
0   1897-01-01 00:00:00
1   1899-12-31 00:00:00
2            2000-01-01
Name: Date, dtype: datetime64[ns]
并对解析后的数据使用函数

正如上面的评论所说,还不清楚年份“00”是指1900年还是2000年,但也许你可以从csv文件的上下文中推断出来

要将“DD/MM/YY”格式的所有年份更改为1900个日期,您可以定义自己的解析函数

>>> def my_parse(d):
...   if d[-3]=='/':
...     d = d[:-3]+'/19'+d[-2:]
...   return parse(d)

>>> df.Date.apply(my_parse)
0   1897-01-01
1   1899-12-31
2   1900-01-01

Python将00读作2000,而不是1900。所以我试着将00编辑成1900:

df2.Date.dt.year.replace(2000, 1990, inplace=True)
但是python返回了一个错误,即日期不能直接编辑。然后我将它们更改为字符串,并使用以下方法进行编辑:

df2['Date'] = df2['Date'].str.replace(r'00', '1900')

这是可行的,但现在我需要找到一种方法,在1896-1968年间循环,而不必每次都键入那一行

那么您想从日期中提取年份值?如何确定1900年开始的日期是19xx还是20xx?例如,如果数据从1900年起切换到DD/MM/YY,那么你如何知道02/05/02是1902年5月2日还是2002年5月2日?啊,我应该说数据集在1968年结束,所以我知道它是1900年,而不是2000年这是问题所在。计算机的读数是2000而不是1900。有人知道如何解决这个问题,而不用我检查每个日期并在年份前添加“19”吗?@MeganMartin可能会使用我发现问题的
date\u解析器
选项。计算机的读数是2000而不是1900。有人知道如何解决这个问题,而不用我检查每个日期并在年份前添加“19”吗?@MeganMartin请检查替代解决方案是的,我尝试了这个和这个:不支持对datetimelike对象的属性进行修改,并将其丢弃。更改原始文件上的值。oops无意对此进行评论。我试过了,但出现了这样的错误:对datetimelike对象属性的修改不受支持,将被丢弃。更改原始文件上的值。我还尝试了df2.Date.dt.year.replace(20001990,inplace=True),但得到了相同的消息,所以我想我必须返回并编辑原始数据
df2.Date.dt.year.replace(2000, 1990, inplace=True)
df2['Date'] = df2['Date'].str.replace(r'00', '1900')