切割数据框架

2024-04-25 22:42:51 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑数据帧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'

为什么会有区别,正确的方法是什么?你知道吗


Tags: 数据name命令newdata标准onethree
3条回答

query在datetime列上也运行良好

In [13]: df.query('one == 2013')
Out[13]:
            one  two  three  four
Ohio 2013-01-01    1      2     3

你要找的条件是

df['one'].str[0:4] == "2013"

基本上,您需要告诉panda将列作为字符串读取,然后对该列中的字符串进行操作。你知道吗

你写它的方式(df['one'][:])是说“给我一个叫做“one”的列,然后给我所有的[:]。你知道吗

因为列'one'由日期组成,所以最好让熊猫识别它,而不是将它识别为字符串。可以使用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, :]

相关问题 更多 >