我正在尝试读取具有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
答案 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