子集pandas数据帧按列中特定月份的日期?

时间:2014-09-29 13:03:23

标签: python pandas

如何对pandas数据框进行子集以获取包含特定月份数据的行?

我有一个2010-01-01格式的日期列。

如果已编入索引,我会使用

df.ix[date1:date2]

但如果数据在列中,该怎么办?

1 个答案:

答案 0 :(得分:3)

可以使用蒙版来选择DataFrame中的范围。

屏蔽只是包含pd.SeriesTrue元素的正常False

使用小兵的一般例子:

df_minions = pd.DataFrame({
    'color':['Red', 'Green', 'Blue', 'Brown'] * 2,
    'name':['Burnie', 'Stinky', 'Swimmy', 'Bashy', 'Flamie', 'Stabbie', 'Blubb', 'Smashie']})
   color     name
0    Red   Burnie
1  Green   Stinky
2   Blue   Swimmy
3  Brown    Bashy
4    Red   Flamie
5  Green  Stabbie
6   Blue    Blubb
7  Brown  Smashie

选择所有棕色爪牙可以很容易地完成:

brown_minion_mask = df_minions['color'] == 'Brown'
0    False
1    False
2    False
3     True
4    False
5    False
6    False
7     True

df_minions[brown_minion_mask]
   color     name
3  Brown    Bashy
7  Brown  Smashie

现在针对您在日期的月份中选择的具体问题:

首先,我将添加一个充满日期的spawned

df_minions['spawned'] = [datetime(2015, m, 5) for m in range(4,6)] * 4
   color     name    spawned
0    Red   Burnie 2015-04-05
1  Green   Stinky 2015-05-05
2   Blue   Swimmy 2015-04-05
3  Brown    Bashy 2015-05-05
4    Red   Flamie 2015-04-05
5  Green  Stabbie 2015-05-05
6   Blue    Blubb 2015-04-05
7  Brown  Smashie 2015-05-05

现在,我们可以正常访问pd.TimeSeries df_minions.spawned.dt.month 0 4 1 5 2 4 3 5 4 4 5 5 6 4 7 5

may_minion_mask = df_minions.spawned.dt.month == 5 df_minions[may_minion_mask] color name spawned 1 Green Stinky 2015-05-05 3 Brown Bashy 2015-05-05 5 Green Stabbie 2015-05-05 7 Brown Smashie 2015-05-05
not_spawned_in_january = df_minions.spawned.dt.month != 1
summer_minions = ((df_minions.spawned > datetime(2015,5,15)) &
                  (df_minions.spawned < datetime(2015,9,15))
name_endswith_y = df_minions.name.str.endswith('y')

我们可以使用此操作来屏蔽我们的数据帧,就像我们对我们的小兵的颜色一样。

<div ng-controller="ExampleController">
    <div ng-repeat="bit in myHTML track by $index" >
     <p ng-bind-html="bit"></p>
 </div>

您当然可以在面具中进行任何类型的操作

(function(angular) {
  'use strict';
angular.module('bindHtmlExample', ['ngSanitize'])
  .controller('ExampleController', ['$scope', function($scope) {
    $scope.myHTML = [];
    for (var i=0; i<6; i++){
    $scope.myHTML[i] =
       'I am an <code>HTML</code>string with ' +
       '<a href="#">links!</a> and other <em>stuff</em>';
    }
    console.log($scope.myHTML)
  }]);
})(window.angular);