切片DataFrame

时间:2016-04-22 15:52:40

标签: python pandas

考虑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'

为什么差异,以及正确的方法是什么?

3 个答案:

答案 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