如何迭代日期时间列表以获得年份

how to get iterate a date time list to get year

我想用下面的代码只打印年份,但是好像很容易出错,我试了很多次都没有得到正确的结果

import pandas as pd
from datetime import datetime

data = pd.read_csv('Meteorite_Landings.csv')
a = str(data["year"])
print a
for i, val in enumerate(a):
    b=[datetime.strptime(date, '%m/%d/%Y %H:%M:%S %p').year for date in a]
    print b

我遇到了这个错误

Traceback (most recent call last): File "C:/Users/shiv/Desktop/new_date_times.py", line 9, in b=[datetime.strptime(date, '%m/%d/%Y %H:%M:%S %p').year for date in a] File "C:\Python27\lib_strptime.py", line 325, in _strptime (data_string, format)) ValueError: time data '0' does not match format '%m/%d/%Y %H:%M:%S %p'

如果没有您尝试读取的 csv 文件,我不能 100% 确定,但看起来您正在尝试将 'year' 列转换为日期时间,然后从中提取年份。您确定您想要的列名为 'year' 吗?您确定每一行在该列中都有一个值吗?您确定该列中的每个值都遵循完全相同的格式,并且它是您在 strptime 中使用的格式吗?对我来说,名为 "year" 的列包含整个日期似乎很奇怪。在这里发布 csv 文件示例将是一个巨大的帮助。对上述问题做出一些假设,我根据您的示例修改了以下代码。

import pandas as pd
from datetime import datetime

data = pd.read_csv('Meteorite_Landings.csv')

b=[datetime.strptime(date, '%m/%d/%Y %H:%M:%S %p').year for date in data["year"]]

print b

我可以建议一种不同的方法来解决您的问题吗?您正在使用 pandas 读取 CSV,然后对其进行迭代。这非常慢,并且有不使用 Pandas API 的缺点。而是像这样阅读文件:

dateparse = lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S')

df = pd.read_csv('Meteorite_Landings.csv', parse_dates=['datetime'], date_parser=dateparse)

请注意,您必须将字符串格式调整为适合您的格式。 现在您将有一个包含日期的日期框列,您可以直接访问 year,如本例所示:

In [1]: import datetime
In [2]: obj = datetime.datetime.now()

In [3]: obj.year
Out[3]: 2016

我提出了这个解决方案,它与你的没有太大区别:

import pandas as pd
from datetime import datetime

data = pd.read_csv('Meteorite_Landings.csv')

for i, val in enumerate(data["year"]):
    try:
        b = datetime.strptime(val, '%m/%d/%Y %H:%M:%S %p').year
        print b
    except TypeError:
        pass

这会打印年份。 try-except 的原因是 the dataset you're probably using 不完整并且包含一些 NAN (?).