考虑DataFrame data
:
one two three four
Ohio 2013-01-01 1 2 3
Colorado 2014-01-05 5 6 7
Utah 2015-05-06 9 10 11
New York 2016-10-11 13 14 15
我想仅使用年份为给定年份的标准来提取行,例如data['one'][:][0:4] == '2013'
之类的内容。但命令data['one'][:][0:4]
返回
Ohio 2013-01-01
Colorado 2014-01-05
Utah 2015-05-06
New York 2016-10-11
Name: one, dtype: object
我认为这是正确的做法,因为命令data['one'][0][0:4]
返回
'2013'
为什么差异,以及正确的方法是什么?
答案 0 :(得分:4)
由于列'one'
由日期组成,因此最好让pandas识别它,而不是将其识别为字符串。您可以使用pd.to_datetime
执行此操作:
df['one'] = pd.to_datetime(df['one'])
这允许您过滤日期属性,而无需担心切片字符串。例如,您可以使用Series.dt.year
检查年份:
df['one'].dt.year == 2013
将此与loc
相结合,可以获得年份为2013年的所有行:
df.loc[df['one'].dt.year == 2013, :]
答案 1 :(得分:0)
您正在寻找的条件是
df['one'].str[0:4] == "2013"
基本上,您需要告诉Pandas将您的列作为字符串读取,然后对该列中的字符串进行操作。
你写它的方式(df['one'][:]
),说“给我一个名为”one“的列,然后给我所有这些[:]
。
答案 2 :(得分:0)
query
在日期时间列
In [13]: df.query('one == 2013')
Out[13]:
one two three four
Ohio 2013-01-01 1 2 3