我想用以下代码打印多年,但它似乎容易出错,我尝试了很多次,但没有得到正确的
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(最近一次调用最后一次):文件 " C:/Users/shiv/Desktop/new_date_times.py" ;,第9行,在 b = [datetime.strptime(日期,'%m /%d /%Y%H:%M:%S%p')。日期年份a]文件" C:\ Python27 \ lib_strptime.py",第325行,在_strptime中 (data_string,format))ValueError:时间数据' 0'格式不匹配'%m /%d /%Y%H:%M:%S%p'
答案 0 :(得分:2)
如果没有您尝试阅读的csv文件,我无法100%确定,但看起来您正在尝试将“年份”列转换为日期时间,然后从中提取年份。您确定所需的列名为“年份”吗?您确定每一行在该列中都有值吗?您确定该列中的每个值都遵循完全相同的格式,并且它是您在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
答案 1 :(得分:1)
我可以建议一种不同的方法来解决您的问题吗?您正在阅读带有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
答案 2 :(得分:1)
我提出这个解决方案,它与你的方案没有多大差别:
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(?)。