在熊猫市中错误的日期

时间:2020-01-02 20:27:40

标签: python python-3.x pandas string-to-datetime

我正在尝试读取具有Date列的csv文件。日期存储为1962年8月27日,1959年9月12日和1965年7月15日。当我使用to_datetime函数时,日期将转换为8/27 / 2062、9 / 12/2059和7/15/2065。我不确定为什么会这样。是因为年份改变了还是什么?

示例:

CancellationTokenSource

检查索引1,3和4

4 个答案:

答案 0 :(得分:1)

这是因为大多数实现都假定00-68年属于2000,而69-99属于1900。如果所有日期均为19xx,则可以在更改前的字符串的year部分添加后缀'19'。到一个日期

如果所有日期都是19xx,则


import pandas as pd

planets = {'FirstVisited':['8/2/62', '9/12/59', '9/12/88']}

planets = pd.DataFrame(planets)


planets['FirstVisited'] = planets['FirstVisited'].str[0:-2] + '19' + planets['FirstVisited'].str[-2:]


planets['FirstVisited'] = pd.to_datetime(planets['FirstVisited'], format = "%d/%m/%Y", errors = 'coerce')



print(planets)


答案 1 :(得分:1)

实际上,这与您的代码无关! 这是编程语言(最基本是C)中的“时间起源”。 C的time.h标头中的时间起源是“ 1970年1月1日”。这就是在此之前您对日期得出错误结果的原因。 我建议您手动更正这些时间...类似:

import pandas
x, y= pandas.readcsv('Planets.csv'), []
for i in x.FirstVisited:
    i= i.split('/')
    i[0], i[1], i[2]= '19'+i[2], i[0], i[1]
    y.append('-'.join(i))
print(y)

答案 2 :(得分:0)

您可以使用pandas to_datetime函数,其参数errors ='coerce'将非日期转换为NaT空值。请在下面查看我的答案。

import pandas as pd

data = {'dates':["8/27/1962", "9/12/1959", "Nan"]}
df = pd.DataFrame(data)

df['dates'] = pd.to_datetime(df.dates,errors='coerce')
#drop Nan from column
df = df.dropna(subset=['dates'])

lst = df['dates'].dt.strftime('%Y-%m-%d')

print(lst)

答案 3 :(得分:0)

有点蛮力,但是如果您知道所有日期都是19'百,则可以执行以下操作:

import pandas as pd
import datetime

df=pd.DataFrame({"dt": ["8/27/62", "9/12/59", "7/15/65"], "x": list("abc")})

df["dt"]=df["dt"].str.split(r"/").apply(lambda x: datetime.datetime(int(x[2])+1900, int(x[0]), int(x[1])))

输出:

#before:
        dt  x
0  8/27/62  a
1  9/12/59  b
2  7/15/65  c

#after:
          dt  x
0 1962-08-27  a
1 1959-09-12  b
2 1965-07-15  c