学习pandas全套代码【超详细】分箱操作、分组聚合、时间序列、数据可视化

承接上篇博客:学习pandas全套代码【超详细】数据查看、输入输出、选取、集成、清洗、转换、重塑、数学和统计方法、排序

本篇文章将会给大家介绍pandas非常实用的几个功能,内容也是非常的多啊。大家掌握好这几个功能,争取将pandas玩出花来。

当然还是老样子,你也可以把本篇博文当作一本小小的pandas书籍,当需要用到pandas的哪些知识的时候,Ctrl+F就可以搜索到啦,现在不看的话就先收藏着。

大家学什么但是不给予方向的行为无异于耍流氓,这里也是分享我多年收藏的技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你,干货内容包括:
在这里插入图片描述
上述这份完整版的Python全套学习资料已经上传CSDN官方,如果需要可以微信扫描下方CSDN官方认证二维码 即可领取

👉[[CSDN大礼包:《python安装包&全套学习资料》免费分享]]安全链接,放心点击

#### 目录
  • 第十一部分:分箱操作
  • 第十二部分:分组聚合
    • 12.1 分组
    • 12.2 分组聚合
  • 第十三部分:时间序列
    • 13.1 时间戳操作
    • 13.2 时间戳索引
    • 13.3 时间序列常用操作
      • 13.3.1 数据移动
      • 13.3.2 日期移动
      • 13.3.3 频率转换
      • 13.3.4 重采样
      • 13.3.5 DataFrame重采样
  • 第十四部分:数据可视化
    • 14.1 线形图
    • 14.2 条形图、柱状图
    • 14.3 饼图
    • 14.4 面积图
    • 14.5 箱式图
    • 14.6 直方图
  • 结束语

第十一部分:分箱操作

df = pd.DataFrame(np.random.randint(0,151,size = (100,3)),
                  columns=['Python','Math','En'])
df

PythonMathEn
0829135
11436764
21459051
37911431
412412049
9511113379
961131287
974813977
9846193
998712714

100 rows × 3 columns

# 等宽
pd.cut(df.Python,
       bins = 4, # 等宽分成四份
       labels=['不及格','及格','中等','优秀'],
       right = True)# 区间,闭区间

0      (1.852, 39.0]
1     (113.0, 150.0]
2     (113.0, 150.0]
3      (76.0, 113.0]
4     (113.0, 150.0]
           ...      
95     (76.0, 113.0]
96     (76.0, 113.0]
97      (39.0, 76.0]
98      (39.0, 76.0]
99     (76.0, 113.0]
Name: Python, Length: 100, dtype: category
Categories (4, interval[float64]): [(1.852, 39.0] < (39.0, 76.0] < (76.0, 113.0] < (113.0, 150.0]]

pd.cut(df.Python,
       bins = 4, # 等宽分成四份
       labels=['不及格','及格','中等','优秀'],
       right = True).value_counts()

优秀     30
中等     29
及格     21
不及格    20
Name: Python, dtype: int64

df['等级'] = pd.cut(df.Python,
       bins = [0,30,60,90,120,150],
       labels=['极差','不及格','及格','中等','优秀'])
df

PythonMathEn等级
0829135极差
11436764优秀
21459051优秀
37911431及格
412412049优秀
9511113379中等
961131287中等
974813977不及格
9846193不及格
998712714及格

100 rows × 4 columns

# 等频
pd.qcut(df.Python,q = 4,labels=['不及格','及格','中等','优秀']).value_counts()

优秀     25
中等     25
及格     25
不及格    25
Name: Python, dtype: int64

第十二部分:分组聚合

12.1 分组

pd.DataFrame(np.random.randint(0,10,size = (10,3)))

012
0116
1460
2750
3823
4956
5429
6752
7334
8443
9744
df = pd.DataFrame(data = {'sex':np.random.randint(0,2,size = 300),
                          'class':np.random.randint(1,9,size = 300),
                          'Python':np.random.randint(0,151,size = 300),
                          'Math':np.random.randint(0,151,size = 300),
                          'En':np.random.randint(0,151,size = 300)})
df['sex'] = df['sex'].map({0:'男',1:'女'})
df

sexclassPythonMathEn
024696148
1812214167
27144831
31587894
46867062
2957114182
296465118106
29761414855
2985746132
2998613446

300 rows × 5 columns

# 单分组
for name,group in df.groupby(by = 'sex'): # 分两组
    print(name)
    print(group)

女
    sex  class  Python  Math   En
2     女      7     144     8   31
3     女      1      58    78   94
4     女      6      86    70   62
5     女      2       3   101   40
6     女      8      87    60  141
..   ..    ...     ...   ...  ...
282   女      6      32    86   72
284   女      2      41    17   61
288   女      6       9    82   87
296   女      4      65   118  106
298   女      5       7    46  132

[139 rows x 5 columns]
男
    sex  class  Python  Math   En
0     男      2      46    96  148
1     男      8     122   141   67
8     男      2      65    13  117
12    男      5      50    46  134
13    男      2      95    29  139
..   ..    ...     ...   ...  ...
293   男      7      61    43   11
294   男      5      78    47  143
295   男      7       1   141   82
297   男      6      14   148   55
299   男      8      61    34   46

[161 rows x 5 columns]

# 多分组
for name ,group in df.groupby(by = ['sex','class']): # sex 2,class 8: 16组
    print(name)
    print(group)

('女', 1)
    sex  class  Python  Math   En
3     女      1      58    78   94
26    女      1      33    22   84
62    女      1      64   128  134
71    女      1      77     6  116
78    女      1      81   145  113
80    女      1     147    27  145
81    女      1     137    83  101
89    女      1     140    46  129
100   女      1     144   126   10
113   女      1       8    15  123
126   女      1       1     7   58
130   女      1      30   133   24
156   女      1     114   125   87
197   女      1      14   118  144
211   女      1     140    23   57
231   女      1     106    90   50
232   女      1      20   132   81
250   女      1      74    38   86
251   女      1      52     3  129
256   女      1       4    82  104
263   女      1      73   125  115
('女', 2)
    sex  class  Python  Math   En
5     女      2       3   101   40
9     女      2      83   110   74
11    女      2     141    88   12
29    女      2     128    44   16
67    女      2      40   122   72
76    女      2     143   127    5
90    女      2     120    84   48
98    女      2      40    74   62
112   女      2      97    35   55
149   女      2      19   149   65
165   女      2       5    29   98
175   女      2     112   124   95
178   女      2      42   101   21
240   女      2      46    58   85
241   女      2     145   122  104
243   女      2     135   100  120
262   女      2      34    68   87
270   女      2      96   128   46
278   女      2      44    19  107
284   女      2      41    17   61
('女', 3)
    sex  class  Python  Math   En
7     女      3      57    66  139
24    女      3      65    75  149
39    女      3     101    68   62
55    女      3      56     2   48
61    女      3      38    39  114
88    女      3     100    50  112
101   女      3      21    72  102
102   女      3      49    22   27
122   女      3      96   121  110
128   女      3      52    46  138
150   女      3     150    86    1
159   女      3       2   140   34
160   女      3      84   127   70
162   女      3      19   110   93
163   女      3      40   127   96
173   女      3     146   109   48
207   女      3      56    58   76
('女', 4)
    sex  class  Python  Math   En
10    女      4     148    41   69
15    女      4     119   133   55
54    女      4       9    40   95
57    女      4     115   106   45
65    女      4     145    60   22
74    女      4      12   131   31
84    女      4       1   110   79
93    女      4      14    64   45
106   女      4      73   139   90
115   女      4      84   107    2
117   女      4       6    62  124
186   女      4      71    49  123
193   女      4      51   109   13
199   女      4      66   143   81
206   女      4     106    59    7
226   女      4      11   125   71
276   女      4      28    40   46
296   女      4      65   118  106
('女', 5)
    sex  class  Python  Math   En
21    女      5      70    68   41
82    女      5      19    98   51
87    女      5      34    94   88
107   女      5      64    19  142
114   女      5     129    33   14
141   女      5      91    49  141
188   女      5     138    89   25
194   女      5      45    47   84
195   女      5      24     1  133
228   女      5     130   100  131
230   女      5      46   138   33
234   女      5     144   140   66
237   女      5      48    84   80
255   女      5       8    61  133
298   女      5       7    46  132
('女', 6)
    sex  class  Python  Math   En
4     女      6      86    70   62
32    女      6     112   128   32
33    女      6     129    30   38
43    女      6     140   150   95
77    女      6      48   104  130
152   女      6      94    19  127
181   女      6     119    83   16
203   女      6     118   104   67
210   女      6      87    58    2
238   女      6     113   131   44
260   女      6      56    48  116
282   女      6      32    86   72
288   女      6       9    82   87
('女', 7)
    sex  class  Python  Math   En
2     女      7     144     8   31
16    女      7     142    12   57
40    女      7     107   113  124
59    女      7      78   142   30
64    女      7       3   128   72
96    女      7      10    68    2
104   女      7      57    85   66
105   女      7      53    73   79
108   女      7     103   135    2
151   女      7     122    12   92
174   女      7     101   105   85
192   女      7     108    68  140
221   女      7      59    74    1
225   女      7      95    52   98
246   女      7     122    82   96
257   女      7     103    49   30
266   女      7      87   130   54
267   女      7     145    99   27
271   女      7      99    58  111
('女', 8)
    sex  class  Python  Math   En
6     女      8      87    60  141
34    女      8      38    98  139
46    女      8      28    31    3
53    女      8     125   130   51
56    女      8     109    88   30
63    女      8      34    35  145
70    女      8      52    34   16
95    女      8       1    12   88
103   女      8      51    42   44
118   女      8      31   107   15
144   女      8      27   144   61
176   女      8      64    13  127
196   女      8      52     6   44
222   女      8      19   115   81
252   女      8     106    29   26
265   女      8      41   137   12
('男', 1)
    sex  class  Python  Math   En
69    男      1     143    24   78
72    男      1      32    59  148
85    男      1      43     9    3
99    男      1      12    52   41
110   男      1      67   136    7
137   男      1     128    95    1
142   男      1      36   142   68
148   男      1      66   100   51
153   男      1     124    40  132
200   男      1       6    74  122
209   男      1      18    74  133
212   男      1     129    15   73
213   男      1      21    43   59
244   男      1      26    60   74
259   男      1      67    28   89
268   男      1      68    49   29
269   男      1      92   129   28
273   男      1      18    97  114
281   男      1      86   149   55
292   男      1       1   107   67
('男', 2)
    sex  class  Python  Math   En
0     男      2      46    96  148
8     男      2      65    13  117
13    男      2      95    29  139
27    男      2      49    11  134
31    男      2     133   149   75
38    男      2      61   145   40
49    男      2     131   133  100
52    男      2      45    67   37
58    男      2      27   122   18
94    男      2      85   135   22
109   男      2     102    78   86
120   男      2     118    72   59
123   男      2     111   148  140
125   男      2      42   109   41
146   男      2      17    53    3
177   男      2      16   137   79
189   男      2      51    49  139
198   男      2      83    60   15
217   男      2     112    64   12
248   男      2      89   111   72
249   男      2     147   104  127
254   男      2      13    12   12
264   男      2     122   148  141
279   男      2     121    85   26
('男', 3)
    sex  class  Python  Math   En
25    男      3      44     6  109
68    男      3      49    97   74
79    男      3      34    39  106
129   男      3     143    16  129
134   男      3     131    20   12
161   男      3     131   143   39
169   男      3      91    60   67
170   男      3     112   150  135
180   男      3      45   106   62
187   男      3     111    44   24
218   男      3     150    14   22
219   男      3      73     1   81
224   男      3      47    27    7
239   男      3      86     5  112
242   男      3      25    44  124
245   男      3      72   145   61
272   男      3      57   143   59
291   男      3      67   117  120
('男', 4)
    sex  class  Python  Math   En
14    男      4     124   113   76
17    男      4     124    60   19
18    男      4     150    32   63
23    男      4      65    74   23
36    男      4      62     8   10
47    男      4     112     9    7
75    男      4      95    92   52
91    男      4      77     0   74
92    男      4     104   118   73
111   男      4     138    52   70
116   男      4     106    46   80
124   男      4       3   101   76
140   男      4     110    63  113
157   男      4     102    65  117
179   男      4     127    61   85
214   男      4     108   123  119
227   男      4     124    86   78
247   男      4     134    85   66
261   男      4       2   114  138
275   男      4      57    65  129
283   男      4     127    29    5
290   男      4     133   113   73
('男', 5)
    sex  class  Python  Math   En
12    男      5      50    46  134
37    男      5       0   143   59
41    男      5       3    64   46
51    男      5      38    20  122
60    男      5      92   132  134
73    男      5      49    31  125
155   男      5       6    63  109
164   男      5      89    54   93
171   男      5     144   122   75
184   男      5      98    24  147
201   男      5     132    80  106
202   男      5      96    29  150
216   男      5      79    96   57
233   男      5      34    90  114
277   男      5      37   111   24
285   男      5      95    43    9
294   男      5      78    47  143
('男', 6)
    sex  class  Python  Math   En
28    男      6      46    35   22
30    男      6     105    88  123
35    男      6     112     1   37
45    男      6      39    35  105
48    男      6      89    49   27
50    男      6      90   134   51
83    男      6      53     6   21
97    男      6      24    40  137
119   男      6      13    20  140
127   男      6      48   145    3
132   男      6      82   129  138
139   男      6      19   104  129
143   男      6     103     4  104
158   男      6     105    66  111
182   男      6      17   136  113
185   男      6      23   117    2
191   男      6     137    53   56
215   男      6      66   140   64
235   男      6     110   112  135
236   男      6      68    44   67
253   男      6      38   131   88
274   男      6      52    97   18
289   男      6     150    95   86
297   男      6      14   148   55
('男', 7)
    sex  class  Python  Math   En
42    男      7      53   138   40
44    男      7      46    74   57
66    男      7      51    98   27
136   男      7      47    63  128
138   男      7      26     1    5
145   男      7      82    57   84
147   男      7      71    13   64
154   男      7     147   109  100
167   男      7     116     6   93
168   男      7     141    86  126
183   男      7      53    30  139
204   男      7     141    50  138
208   男      7     122    60  101
220   男      7      35   139  124
258   男      7     150   140  134
286   男      7     115     1  137
293   男      7      61    43   11
295   男      7       1   141   82
('男', 8)
    sex  class  Python  Math   En
1     男      8     122   141   67
19    男      8      49   101  102
20    男      8     128    32   72
22    男      8     140   139   12
86    男      8      25    70   13
121   男      8     130   101  126
131   男      8     123    64  133
133   男      8      62   147   20
135   男      8     142    34    3
166   男      8      72    80   99
172   男      8      97    72    0
190   男      8     131   100   13
205   男      8      65    22   55
223   男      8      75    62  110
229   男      8      62   137  100
280   男      8      46    73  149
287   男      8     107    25  129
299   男      8      61    34   46

g = df.groupby(by = 'sex')[['Math','En']] # 分组取数据

m = {'sex':'category','class':'category','Python':'IT','Keras':'IT','Tensorflow':'IT','Java':'IT','C++':'IT'}
for name,data in df.groupby(m,axis = 0):
    print('组名',name)
    print('数据',data)

for name,group in g:
    print(name)
    print(group)

女
    sex  class  Python  Math   En
2     女      7     144     8   31
3     女      1      58    78   94
4     女      6      86    70   62
5     女      2       3   101   40
6     女      8      87    60  141
..   ..    ...     ...   ...  ...
282   女      6      32    86   72
284   女      2      41    17   61
288   女      6       9    82   87
296   女      4      65   118  106
298   女      5       7    46  132

[139 rows x 5 columns]
男
    sex  class  Python  Math   En
0     男      2      46    96  148
1     男      8     122   141   67
8     男      2      65    13  117
12    男      5      50    46  134
13    男      2      95    29  139
..   ..    ...     ...   ...  ...
293   男      7      61    43   11
294   男      5      78    47  143
295   男      7       1   141   82
297   男      6      14   148   55
299   男      8      61    34   46

[161 rows x 5 columns]

for name ,group in df['Math'].groupby([df['sex'],df['class']]):
    print(name)
    print(group)

('女', 1)
3       78
26      22
62     128
71       6
78     145
80      27
81      83
89      46
100    126
113     15
126      7
130    133
156    125
197    118
211     23
231     90
232    132
250     38
251      3
256     82
263    125
Name: Math, dtype: int64
('女', 2)
5      101
9      110
11      88
29      44
67     122
76     127
90      84
98      74
112     35
149    149
165     29
175    124
178    101
240     58
241    122
243    100
262     68
270    128
278     19
284     17
Name: Math, dtype: int64
('女', 3)
7       66
24      75
39      68
55       2
61      39
88      50
101     72
102     22
122    121
128     46
150     86
159    140
160    127
162    110
163    127
173    109
207     58
Name: Math, dtype: int64
('女', 4)
10      41
15     133
54      40
57     106
65      60
74     131
84     110
93      64
106    139
115    107
117     62
186     49
193    109
199    143
206     59
226    125
276     40
296    118
Name: Math, dtype: int64
('女', 5)
21      68
82      98
87      94
107     19
114     33
141     49
188     89
194     47
195      1
228    100
230    138
234    140
237     84
255     61
298     46
Name: Math, dtype: int64
('女', 6)
4       70
32     128
33      30
43     150
77     104
152     19
181     83
203    104
210     58
238    131
260     48
282     86
288     82
Name: Math, dtype: int64
('女', 7)
2        8
16      12
40     113
59     142
64     128
96      68
104     85
105     73
108    135
151     12
174    105
192     68
221     74
225     52
246     82
257     49
266    130
267     99
271     58
Name: Math, dtype: int64
('女', 8)
6       60
34      98
46      31
53     130
56      88
63      35
70      34
95      12
103     42
118    107
144    144
176     13
196      6
222    115
252     29
265    137
Name: Math, dtype: int64
('男', 1)
69      24
72      59
85       9
99      52
110    136
137     95
142    142
148    100
153     40
200     74
209     74
212     15
213     43
244     60
259     28
268     49
269    129
273     97
281    149
292    107
Name: Math, dtype: int64
('男', 2)
0       96
8       13
13      29
27      11
31     149
38     145
49     133
52      67
58     122
94     135
109     78
120     72
123    148
125    109
146     53
177    137
189     49
198     60
217     64
248    111
249    104
254     12
264    148
279     85
Name: Math, dtype: int64
('男', 3)
25       6
68      97
79      39
129     16
134     20
161    143
169     60
170    150
180    106
187     44
218     14
219      1
224     27
239      5
242     44
245    145
272    143
291    117
Name: Math, dtype: int64
('男', 4)
14     113
17      60
18      32
23      74
36       8
47       9
75      92
91       0
92     118
111     52
116     46
124    101
140     63
157     65
179     61
214    123
227     86
247     85
261    114
275     65
283     29
290    113
Name: Math, dtype: int64
('男', 5)
12      46
37     143
41      64
51      20
60     132
73      31
155     63
164     54
171    122
184     24
201     80
202     29
216     96
233     90
277    111
285     43
294     47
Name: Math, dtype: int64
('男', 6)
28      35
30      88
35       1
45      35
48      49
50     134
83       6
97      40
119     20
127    145
132    129
139    104
143      4
158     66
182    136
185    117
191     53
215    140
235    112
236     44
253    131
274     97
289     95
297    148
Name: Math, dtype: int64
('男', 7)
42     138
44      74
66      98
136     63
138      1
145     57
147     13
154    109
167      6
168     86
183     30
204     50
208     60
220    139
258    140
286      1
293     43
295    141
Name: Math, dtype: int64
('男', 8)
1      141
19     101
20      32
22     139
86      70
121    101
131     64
133    147
135     34
166     80
172     72
190    100
205     22
223     62
229    137
280     73
287     25
299     34
Name: Math, dtype: int64

for name,group in df[['Math','Python']].groupby(df['sex']):
    print(name)
    print(group)

女
     Math  Python
2       8     144
3      78      58
4      70      86
5     101       3
6      60      87
..    ...     ...
282    86      32
284    17      41
288    82       9
296   118      65
298    46       7

[139 rows x 2 columns]
男
     Math  Python
0      96      46
1     141     122
8      13      65
12     46      50
13     29      95
..    ...     ...
293    43      61
294    47      78
295   141       1
297   148      14
299    34      61

[161 rows x 2 columns]

for name,group in df.groupby(df.dtypes,axis = 1):
    print(name)
    print(group)

int64
     class  Python  Keras  Tensorflow  Java  C++
0        5      25    103         121    25   51
1        4      80     64         140   122   66
2        3     136     63          64    97   30
3        8     125     92          38    81  129
4        2     107     99          78    48  117
..     ...     ...    ...         ...   ...  ...
295      4     105     79          84    51   86
296      7      56     91          25    78   44
297      8      43    109          10    71   78
298      8     107    113         121     9   12
299      5      36     25          46   102   36

[300 rows x 6 columns]
object
    sex
0     男
1     男
2     女
3     女
4     男
..   ..
295   女
296   女
297   女
298   女
299   男

[300 rows x 1 columns]

df = pd.DataFrame(data = {'sex':np.random.randint(0,2,size = 300),
                          'class':np.random.randint(1,9,size = 300),
                          'Python':np.random.randint(0,151,size = 300),
                          'Math':np.random.randint(0,151,size = 300),
                          'En':np.random.randint(0,151,size = 300)})
df['sex'] = df['sex'].map({0:'男',1:'女'})
df

sexclassPythonMathEn
07010482
143010654
2413812688
31269857
42548660
295410527130
296613711559
297513112428
298864800
29916214248

300 rows × 5 columns

for name,group in df.groupby(by = 'sex'): # 单分组
    print(name)
    print(group)

女
    sex  class  Python  Math  En
0     女      7       0   104  82
1     女      4      30   106  54
3     女      1      26    98  57
5     女      4      89     6  45
6     女      3     142   115  61
..   ..    ...     ...   ...  ..
288   女      7     134    54   5
291   女      4      33     0  42
294   女      3      34   138  21
296   女      6     137   115  59
298   女      8      64    80   0

[168 rows x 5 columns]
男
    sex  class  Python  Math   En
2     男      4     138   126   88
4     男      2      54    86   60
7     男      5     135   141    5
8     男      3      90    99   83
10    男      7       5   139  105
..   ..    ...     ...   ...  ...
292   男      5     135     1   31
293   男      2      34    92  150
295   男      4     105    27  130
297   男      5     131   124   28
299   男      1      62   142   48

[132 rows x 5 columns]

for name,group in df.groupby(by = ['sex','class']): # 多分组,性别2,class 8 = 16
    print(name)
    print(group)

('女', 1)
    sex  class  Python  Math   En
3     女      1      26    98   57
16    女      1     144    79  143
27    女      1      18    98  104
48    女      1     111   140   54
55    女      1      59    43    6
61    女      1     109   132    2
74    女      1      71    62   35
93    女      1      80   131   41
157   女      1      96    11  130
168   女      1      76    23  137
188   女      1      80    16  100
203   女      1      48   137  102
207   女      1      11    78   42
236   女      1       2   119  148
275   女      1      56   109   22
278   女      1      93    22   45
287   女      1     115   115  118
('女', 2)
    sex  class  Python  Math   En
14    女      2     129   142  116
20    女      2      20    64  139
50    女      2     135    77   58
53    女      2     129    50   84
70    女      2      58   145  123
73    女      2     142    48  136
103   女      2     129    39  107
124   女      2     118   112  103
126   女      2      10    72   57
135   女      2     112   137   38
139   女      2      74    22  118
159   女      2      95    79   40
171   女      2      94    43   30
175   女      2     110     1    4
184   女      2      68    20   76
204   女      2     117   121    0
257   女      2      18   127  135
277   女      2      35    90   96
282   女      2       0   132  119
285   女      2     132    11  146
286   女      2     103    21  122
('女', 3)
    sex  class  Python  Math   En
6     女      3     142   115   61
18    女      3      54    70   71
51    女      3       4    20  105
65    女      3      63    48   11
71    女      3     137   150   83
88    女      3       3   114    9
106   女      3      17   108   35
116   女      3      46    70    3
127   女      3     104    92   18
130   女      3      27   138   76
166   女      3      48    81   61
208   女      3     146    39  135
219   女      3     142    91   20
237   女      3     112   105  137
239   女      3      74   129   63
243   女      3     147    52  104
248   女      3      61   124  122
266   女      3      92   110   31
276   女      3      51    75   26
280   女      3      25   103  118
283   女      3       0    37   54
294   女      3      34   138   21
('女', 4)
    sex  class  Python  Math   En
1     女      4      30   106   54
5     女      4      89     6   45
24    女      4     140    95   56
28    女      4      47    66  136
39    女      4      48     7   67
45    女      4      91    60   33
49    女      4     130    34   43
69    女      4     131    92  108
72    女      4      34    86   86
84    女      4      78    51   52
89    女      4     114    61   40
95    女      4      67    35  104
96    女      4     118    91   14
105   女      4       6     2   44
118   女      4     138    19   42
129   女      4      94    76   96
141   女      4       8    48    2
191   女      4      77    14  127
192   女      4     113    18    8
198   女      4     106    18  103
199   女      4      16    27   96
252   女      4      51    53   88
258   女      4      79    12  150
291   女      4      33     0   42
('女', 5)
    sex  class  Python  Math   En
9     女      5      65   100   37
12    女      5     143   134   53
17    女      5     128   108  103
25    女      5     100    59   73
29    女      5      10    44  123
67    女      5      61    15  122
80    女      5      79    74  100
86    女      5      95    69   75
108   女      5       9   108    3
115   女      5      64   124   73
132   女      5     122    46   59
150   女      5      84    77    6
154   女      5     110     4   33
160   女      5     127    55    1
162   女      5      37    77  120
164   女      5     137   125   66
176   女      5      62    57  116
177   女      5      33   123  105
190   女      5     146   123   24
213   女      5      52    23  110
224   女      5      93    52  123
238   女      5      26    15  112
253   女      5       1    37   78
('女', 6)
    sex  class  Python  Math   En
13    女      6      97    92   72
23    女      6      44    22  115
30    女      6      13   133   53
38    女      6      37    73  140
43    女      6     109   111   99
44    女      6     126   112  149
47    女      6      19   118   88
58    女      6      70   139   29
76    女      6      38    21  138
121   女      6     119    45  145
147   女      6      69    71  106
185   女      6      91    84   39
215   女      6      83   106  121
242   女      6     117     9  113
251   女      6     109    49   42
255   女      6     110   136   56
270   女      6      65    94  125
271   女      6     125   139   38
296   女      6     137   115   59
('女', 7)
    sex  class  Python  Math   En
0     女      7       0   104   82
22    女      7     100   131  113
37    女      7     145    85  116
54    女      7      39   116  106
57    女      7      87   124   25
81    女      7       1    73  130
83    女      7      66    93   54
99    女      7      46    12   81
102   女      7      69    26   86
110   女      7      51    63   28
117   女      7      87    50   91
123   女      7      40    85  115
131   女      7       5    40  144
134   女      7      48    81  140
155   女      7      71     0   20
158   女      7      91   120   24
174   女      7     117    95    6
196   女      7      45    27  141
202   女      7      20   110   37
209   女      7     126    80    9
216   女      7      13    59   17
218   女      7      15    15   23
221   女      7      27    14   85
233   女      7     123    17   49
274   女      7      71   118   20
288   女      7     134    54    5
('女', 8)
    sex  class  Python  Math   En
34    女      8     119   110  132
52    女      8      26    44   92
66    女      8     147    26  130
68    女      8      55   150   19
82    女      8      79    48   18
92    女      8      39    56   33
119   女      8     146    85  115
149   女      8      53    79   25
163   女      8     130    83   22
182   女      8      94   146  143
230   女      8      27   122   23
244   女      8      11     7   81
247   女      8      51    21   45
250   女      8     133    76   69
259   女      8      37    73  108
298   女      8      64    80    0
('男', 1)
    sex  class  Python  Math   En
33    男      1     107    80   17
62    男      1      70    33   35
78    男      1      95    54   82
94    男      1      65    32  119
125   男      1     138   100  112
128   男      1       2    56  102
137   男      1      27    84  117
143   男      1      61    74  150
148   男      1      74    28  129
167   男      1      47    47  132
210   男      1      70    75   88
212   男      1     124    96  130
226   男      1       1    64   64
249   男      1      77   150  128
267   男      1      39    97  140
279   男      1     136   143    3
281   男      1      82    69   55
299   男      1      62   142   48
('男', 2)
    sex  class  Python  Math   En
4     男      2      54    86   60
41    男      2      96   145  110
42    男      2      93    51   89
109   男      2     138    96    3
142   男      2      11   105  109
172   男      2      21   124    6
195   男      2     125    50  142
231   男      2      65    47   85
234   男      2     130     8   65
235   男      2     113   120   19
240   男      2     124     5  101
241   男      2     134    47   18
246   男      2      49    37   49
265   男      2      86    30   43
269   男      2     141     7  131
272   男      2     101   121   84
273   男      2     117    64   97
293   男      2      34    92  150
('男', 3)
    sex  class  Python  Math   En
8     男      3      90    99   83
32    男      3     127   115   98
60    男      3     102    80  147
97    男      3     131    69   44
98    男      3     123   108    4
100   男      3     146    89   12
101   男      3      27    33   94
144   男      3     139   126  130
153   男      3     140    37   40
178   男      3     103    72  103
186   男      3     141    34  142
201   男      3     125     8  142
211   男      3     101   137    5
222   男      3     106    54   17
245   男      3     136    84    8
256   男      3      79    60   53
264   男      3     113   128   22
('男', 4)
    sex  class  Python  Math   En
2     男      4     138   126   88
11    男      4     150    35   75
21    男      4      24    50   69
75    男      4      98    85   10
87    男      4     140     8  104
90    男      4      21    15   65
112   男      4      98    16  140
140   男      4      48    55  103
193   男      4      91   104   13
197   男      4      24   121   44
200   男      4      62   123    1
223   男      4     133   109   12
227   男      4      65    19   13
254   男      4      69   100  141
261   男      4      53   114   11
262   男      4      81    57    6
268   男      4      36    13   59
284   男      4     112    81   21
290   男      4      49   102  103
295   男      4     105    27  130
('男', 5)
    sex  class  Python  Math   En
7     男      5     135   141    5
26    男      5       8    27   88
35    男      5     125   114   17
40    男      5      75     5   87
59    男      5     124   144   72
63    男      5      51   100   73
107   男      5      10    22   45
120   男      5     103    70   32
151   男      5      44    99   58
152   男      5     120    73   58
165   男      5      14    59   39
179   男      5      73    79  103
187   男      5     117    85  106
217   男      5      63    52   76
228   男      5      40     5   76
263   男      5      71    60   69
289   男      5     118   127   40
292   男      5     135     1   31
297   男      5     131   124   28
('男', 6)
    sex  class  Python  Math   En
31    男      6      59    55   99
79    男      6      68   136  132
133   男      6      94    25  139
173   男      6     138   148    5
180   男      6      28    79   78
183   男      6     133    27   52
205   男      6      63    52   77
220   男      6      62   122   35
('男', 7)
    sex  class  Python  Math   En
10    男      7       5   139  105
15    男      7      89    90  102
19    男      7      83    36   80
36    男      7     106    33  142
46    男      7      27    55  103
56    男      7      53   141  147
77    男      7      80   130   78
85    男      7     105    71   53
91    男      7      92    66  116
104   男      7      29    68   52
113   男      7      83    28  138
122   男      7      84    61   56
138   男      7     136    50   56
145   男      7      45    40   38
181   男      7      51    71   80
194   男      7      31    65  149
229   男      7      51   103  114
('男', 8)
    sex  class  Python  Math   En
64    男      8     104    10    3
111   男      8     122   128  112
114   男      8      32     6   32
136   男      8      13    16    9
146   男      8      43   138  112
156   男      8      85    11  133
161   男      8      68   146   54
169   男      8     138    76    0
170   男      8      28    96   71
189   男      8      78   112   16
206   男      8     133    36   70
214   男      8      36   115   62
225   男      8      80    30   98
232   男      8      63    89   97
260   男      8     124   110   15

for name,group in df[['Python','Math']].groupby(df['sex']):
    print(name,group)

女      Python  Math
0         0   104
1        30   106
3        26    98
5        89     6
6       142   115
..      ...   ...
288     134    54
291      33     0
294      34   138
296     137   115
298      64    80

[168 rows x 2 columns]
男      Python  Math
2       138   126
4        54    86
7       135   141
8        90    99
10        5   139
..      ...   ...
292     135     1
293      34    92
295     105    27
297     131   124
299      62   142

[132 rows x 2 columns]

for name,group in df[['Python','Math']].groupby([df['sex'],df['class']]):
    print(name,group)

('女', 1)      Python  Math
3        26    98
16      144    79
27       18    98
48      111   140
55       59    43
61      109   132
74       71    62
93       80   131
157      96    11
168      76    23
188      80    16
203      48   137
207      11    78
236       2   119
275      56   109
278      93    22
287     115   115
('女', 2)      Python  Math
14      129   142
20       20    64
50      135    77
53      129    50
70       58   145
73      142    48
103     129    39
124     118   112
126      10    72
135     112   137
139      74    22
159      95    79
171      94    43
175     110     1
184      68    20
204     117   121
257      18   127
277      35    90
282       0   132
285     132    11
286     103    21
('女', 3)      Python  Math
6       142   115
18       54    70
51        4    20
65       63    48
71      137   150
88        3   114
106      17   108
116      46    70
127     104    92
130      27   138
166      48    81
208     146    39
219     142    91
237     112   105
239      74   129
243     147    52
248      61   124
266      92   110
276      51    75
280      25   103
283       0    37
294      34   138
('女', 4)      Python  Math
1        30   106
5        89     6
24      140    95
28       47    66
39       48     7
45       91    60
49      130    34
69      131    92
72       34    86
84       78    51
89      114    61
95       67    35
96      118    91
105       6     2
118     138    19
129      94    76
141       8    48
191      77    14
192     113    18
198     106    18
199      16    27
252      51    53
258      79    12
291      33     0
('女', 5)      Python  Math
9        65   100
12      143   134
17      128   108
25      100    59
29       10    44
67       61    15
80       79    74
86       95    69
108       9   108
115      64   124
132     122    46
150      84    77
154     110     4
160     127    55
162      37    77
164     137   125
176      62    57
177      33   123
190     146   123
213      52    23
224      93    52
238      26    15
253       1    37
('女', 6)      Python  Math
13       97    92
23       44    22
30       13   133
38       37    73
43      109   111
44      126   112
47       19   118
58       70   139
76       38    21
121     119    45
147      69    71
185      91    84
215      83   106
242     117     9
251     109    49
255     110   136
270      65    94
271     125   139
296     137   115
('女', 7)      Python  Math
0         0   104
22      100   131
37      145    85
54       39   116
57       87   124
81        1    73
83       66    93
99       46    12
102      69    26
110      51    63
117      87    50
123      40    85
131       5    40
134      48    81
155      71     0
158      91   120
174     117    95
196      45    27
202      20   110
209     126    80
216      13    59
218      15    15
221      27    14
233     123    17
274      71   118
288     134    54
('女', 8)      Python  Math
34      119   110
52       26    44
66      147    26
68       55   150
82       79    48
92       39    56
119     146    85
149      53    79
163     130    83
182      94   146
230      27   122
244      11     7
247      51    21
250     133    76
259      37    73
298      64    80
('男', 1)      Python  Math
33      107    80
62       70    33
78       95    54
94       65    32
125     138   100
128       2    56
137      27    84
143      61    74
148      74    28
167      47    47
210      70    75
212     124    96
226       1    64
249      77   150
267      39    97
279     136   143
281      82    69
299      62   142
('男', 2)      Python  Math
4        54    86
41       96   145
42       93    51
109     138    96
142      11   105
172      21   124
195     125    50
231      65    47
234     130     8
235     113   120
240     124     5
241     134    47
246      49    37
265      86    30
269     141     7
272     101   121
273     117    64
293      34    92
('男', 3)      Python  Math
8        90    99
32      127   115
60      102    80
97      131    69
98      123   108
100     146    89
101      27    33
144     139   126
153     140    37
178     103    72
186     141    34
201     125     8
211     101   137
222     106    54
245     136    84
256      79    60
264     113   128
('男', 4)      Python  Math
2       138   126
11      150    35
21       24    50
75       98    85
87      140     8
90       21    15
112      98    16
140      48    55
193      91   104
197      24   121
200      62   123
223     133   109
227      65    19
254      69   100
261      53   114
262      81    57
268      36    13
284     112    81
290      49   102
295     105    27
('男', 5)      Python  Math
7       135   141
26        8    27
35      125   114
40       75     5
59      124   144
63       51   100
107      10    22
120     103    70
151      44    99
152     120    73
165      14    59
179      73    79
187     117    85
217      63    52
228      40     5
263      71    60
289     118   127
292     135     1
297     131   124
('男', 6)      Python  Math
31       59    55
79       68   136
133      94    25
173     138   148
180      28    79
183     133    27
205      63    52
220      62   122
('男', 7)      Python  Math
10        5   139
15       89    90
19       83    36
36      106    33
46       27    55
56       53   141
77       80   130
85      105    71
91       92    66
104      29    68
113      83    28
122      84    61
138     136    50
145      45    40
181      51    71
194      31    65
229      51   103
('男', 8)      Python  Math
64      104    10
111     122   128
114      32     6
136      13    16
146      43   138
156      85    11
161      68   146
169     138    76
170      28    96
189      78   112
206     133    36
214      36   115
225      80    30
232      63    89
260     124   110

for name,group in df.groupby(df.dtypes,axis = 1): #根据数据类型进行分组
    print(name,group)

int64      class  Python  Math   En
0        7       0   104   82
1        4      30   106   54
2        4     138   126   88
3        1      26    98   57
4        2      54    86   60
..     ...     ...   ...  ...
295      4     105    27  130
296      6     137   115   59
297      5     131   124   28
298      8      64    80    0
299      1      62   142   48

[300 rows x 4 columns]
object     sex
0     女
1     女
2     男
3     女
4     男
..   ..
295   男
296   女
297   男
298   女
299   男

[300 rows x 1 columns]

m = {'sex':'category','class':'category','Python':'科目','Math':'科目','En':'科目'}
for name,group in df.groupby(by = m,axis = 1):
    print(name,group)

category     sex  class
0     女      7
1     女      4
2     男      4
3     女      1
4     男      2
..   ..    ...
295   男      4
296   女      6
297   男      5
298   女      8
299   男      1

[300 rows x 2 columns]
科目      Python  Math   En
0         0   104   82
1        30   106   54
2       138   126   88
3        26    98   57
4        54    86   60
..      ...   ...  ...
295     105    27  130
296     137   115   59
297     131   124   28
298      64    80    0
299      62   142   48

[300 rows x 3 columns]

12.2 分组聚合

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead tr th {
    text-align: left;
}

.dataframe thead tr:last-of-type th {
    text-align: right;
}

EnMathPython
方差标准差计数
sexclass
12454.249.517.0
22057.145.421.0145
31873.643.322.0150
41643.540.524.0106
51704.141.323.0134
61673.140.919.0139
72281.447.826.0131
82354.748.516.0150
12013.544.918.0
22089.245.718.0145
32822.353.117.0137
42337.148.320.0126
5828.328.819.0144
62132.446.28.0148
71333.436.517.0141
81999.244.715.0146
df.groupby(by = ['sex','class']).agg({'Python':[('平均值',np.mean)],
                        'Math':[('最小值',np.min),('最大值',np.max)],
                        'En':[('标准差',np.std),('方差',np.var),('计数',np.size)]}).round(1)

PythonMathEn
平均值最小值最大值
sexclass
170.311140
287.0114545.4
369.52015043.3
476.6010640.5
577.6413441.3
683.1913940.9
763.0013147.8
875.7715048.5
170.928150
290.7514545.7
3113.5813753.1
479.8812648.3
581.9114428.8
680.62514846.2
767.62814136.5
876.5614644.7

第十三部分:时间序列

13.1 时间戳操作

pd.Timestamp('2020.09.15 20') # 时刻数据,具体点

Timestamp('2020-09-15 20:00:00')

pd.Period('2020.09.15',freq='M') # 时期数据,表示一段时间,频率

Period('2020-09', 'M')

index = pd.date_range('2020.09.15',freq='D',periods=10)
index

DatetimeIndex(['2020-09-15', '2020-09-16', '2020-09-17', '2020-09-18',
               '2020-09-19', '2020-09-20', '2020-09-21', '2020-09-22',
               '2020-09-23', '2020-09-24'],
              dtype='datetime64[ns]', freq='D')

pd.period_range('2020.09.15',periods=10)

PeriodIndex(['2020-09-15', '2020-09-16', '2020-09-17', '2020-09-18',
             '2020-09-19', '2020-09-20', '2020-09-21', '2020-09-22',
             '2020-09-23', '2020-09-24'],
            dtype='period[D]', freq='D')

ts = pd.Series(np.random.randint(0,10,size = 10),index = index)
ts

2020-09-15    7
2020-09-16    6
2020-09-17    3
2020-09-18    1
2020-09-19    4
2020-09-20    8
2020-09-21    2
2020-09-22    8
2020-09-23    3
2020-09-24    3
Freq: D, dtype: int64

# 时间戳的转换
pd.to_datetime(['2020.09.15','2020-09-15','2020/09/15','15/09/2020'])

DatetimeIndex(['2020-09-15', '2020-09-15', '2020-09-15', '2020-09-15'], dtype='datetime64[ns]', freq=None)

import time
time.time() # 秒

1600171606.469443

pd.to_datetime(1600171606,unit='s')

Timestamp('2020-09-15 12:06:46')

dt = pd.to_datetime(1600171606469,unit='ms') # 世界标准时间
dt

Timestamp('2020-09-15 12:06:46.469000')

dt + pd.DateOffset(hours = 8) # 北京时间

Timestamp('2020-09-15 20:06:46.469000')

dt + pd.DateOffset(days = 100) # 100天之后日期

Timestamp('2020-12-24 12:06:46.469000')

13.2 时间戳索引

ts = pd.Series(np.random.randint(0,300,size = 200),
               index=pd.date_range('2020-09-15',freq='D',periods=200))
ts

2020-09-15    155
2020-09-16     49
2020-09-17     71
2020-09-18    212
2020-09-19     60
             ... 
2021-03-29    104
2021-03-30     98
2021-03-31    170
2021-04-01     54
2021-04-02     61
Freq: D, Length: 200, dtype: int64

# str字符串,进行索引
ts['2020/09/18']

212

ts['2020/09/15':'2020.09.20'] # 切片操作

2020-09-15    155
2020-09-16     49
2020-09-17     71
2020-09-18    212
2020-09-19     60
2020-09-20     50
Freq: D, dtype: int64

ts['2020/09'] # 获取了9月份的数据

2020-09-15    155
2020-09-16     49
2020-09-17     71
2020-09-18    212
2020-09-19     60
2020-09-20     50
2020-09-21    129
2020-09-22    299
2020-09-23    189
2020-09-24    287
2020-09-25     88
2020-09-26     65
2020-09-27    166
2020-09-28    242
2020-09-29    187
2020-09-30     92
Freq: D, dtype: int64

ts['2021'] # 获取了2020年的数据

2021-01-01     42
2021-01-02    213
2021-01-03    244
2021-01-04     15
2021-01-05    232
             ... 
2021-03-29    104
2021-03-30     98
2021-03-31    170
2021-04-01     54
2021-04-02     61
Freq: D, Length: 92, dtype: int64

ts[pd.Timestamp('2020.09.15')]

155

ts[pd.Timestamp('2020.09.15'):pd.Timestamp('2020.09.22')]

2020-09-15    155
2020-09-16     49
2020-09-17     71
2020-09-18    212
2020-09-19     60
2020-09-20     50
2020-09-21    129
2020-09-22    299
Freq: D, dtype: int64

pd.Period('2020.09.15',freq='2D')

Period('2020-09-15', '2D')

ts[pd.Timestamp('2020.09.15')::3] # 有间隔的获取数据

2020-09-15    155
2020-09-18    212
2020-09-21    129
2020-09-24    287
2020-09-27    166
             ... 
2021-03-20    187
2021-03-23     31
2021-03-26    119
2021-03-29    104
2021-04-01     54
Freq: 3D, Length: 67, dtype: int64

ts[pd.Period('2020.09.15',freq='2D')]

ts[pd.date_range('2020.09.15',freq='D',periods=15)]

2020-09-15    155
2020-09-16     49
2020-09-17     71
2020-09-18    212
2020-09-19     60
2020-09-20     50
2020-09-21    129
2020-09-22    299
2020-09-23    189
2020-09-24    287
2020-09-25     88
2020-09-26     65
2020-09-27    166
2020-09-28    242
2020-09-29    187
Freq: D, dtype: int64

ts.index.year

Int64Index([2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
            ...
            2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021],
           dtype='int64', length=200)

ts.index.dayofyear # 202001915 对应着2020年的第259天

Int64Index([259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
            ...
             83,  84,  85,  86,  87,  88,  89,  90,  91,  92],
           dtype='int64', length=200)

import warnings
warnings.filterwarnings('ignore')

ts.index.weekofyear # 对应着一年中第多少周

Int64Index([38, 38, 38, 38, 38, 38, 39, 39, 39, 39,
            ...
            12, 12, 12, 12, 12, 13, 13, 13, 13, 13],
           dtype='int64', length=200)

ts.shift(periods = 2,freq = pd.tseries.offsets.Day()) # 天移动

2020-09-17    155
2020-09-18     49
2020-09-19     71
2020-09-20    212
2020-09-21     60
             ... 
2021-03-31    104
2021-04-01     98
2021-04-02    170
2021-04-03     54
2021-04-04     61
Freq: D, Length: 200, dtype: int64

ts

2020-09-15    155
2020-09-16     49
2020-09-17     71
2020-09-18    212
2020-09-19     60
             ... 
2021-03-29    104
2021-03-30     98
2021-03-31    170
2021-04-01     54
2021-04-02     61
Freq: D, Length: 200, dtype: int64

13.3 时间序列常用操作

ts = pd.Series(np.random.randint(0,1024,size = 365),
               index = pd.date_range('2020/1/1',freq='D',periods=365))
ts

2020-01-01    921
2020-01-02    162
2020-01-03    336
2020-01-04    257
2020-01-05    369
             ... 
2020-12-26     12
2020-12-27    183
2020-12-28    944
2020-12-29    821
2020-12-30    522
Freq: D, Length: 365, dtype: int64

13.3.1 数据移动
ts.shift(periods=2) # 数据向后移动2

2020-01-01      NaN
2020-01-02      NaN
2020-01-03    921.0
2020-01-04    162.0
2020-01-05    336.0
              ...  
2020-12-26    545.0
2020-12-27    714.0
2020-12-28     12.0
2020-12-29    183.0
2020-12-30    944.0
Freq: D, Length: 365, dtype: float64

ts.shift(periods=-2) # 数据向前移动

2020-01-01    336.0
2020-01-02    257.0
2020-01-03    369.0
2020-01-04     16.0
2020-01-05    724.0
              ...  
2020-12-26    944.0
2020-12-27    821.0
2020-12-28    522.0
2020-12-29      NaN
2020-12-30      NaN
Freq: D, Length: 365, dtype: float64

13.3.2 日期移动
ts.shift(periods=5,freq=pd.tseries.offsets.Day()) # 时间后移;负数,前移

2020-01-06    921
2020-01-07    162
2020-01-08    336
2020-01-09    257
2020-01-10    369
             ... 
2020-12-31     12
2021-01-01    183
2021-01-02    944
2021-01-03    821
2021-01-04    522
Freq: D, Length: 365, dtype: int64

ts.shift(periods=-5,freq=pd.tseries.offsets.MonthBegin())

2019-08-01    921
2019-09-01    162
2019-09-01    336
2019-09-01    257
2019-09-01    369
             ... 
2020-08-01     12
2020-08-01    183
2020-08-01    944
2020-08-01    821
2020-08-01    522
Length: 365, dtype: int64

13.3.3 频率转换
ts.asfreq(pd.tseries.offsets.MonthEnd()) # 365天,频率转变成月

2020-01-31    932
2020-02-29    302
2020-03-31    851
2020-04-30    903
2020-05-31    356
2020-06-30    834
2020-07-31    846
2020-08-31    272
2020-09-30    279
2020-10-31    256
2020-11-30    568
Freq: M, dtype: int64

ts.asfreq(pd.tseries.offsets.Week()) # 转变成周

2020-01-01    921
2020-01-08     75
2020-01-15    518
2020-01-22    817
2020-01-29    534
2020-02-05    624
2020-02-12    959
2020-02-19    304
2020-02-26    424
2020-03-04    839
2020-03-11     93
2020-03-18    856
2020-03-25    436
2020-04-01    590
2020-04-08    532
2020-04-15    875
2020-04-22    699
2020-04-29    840
2020-05-06    753
2020-05-13    571
2020-05-20    370
2020-05-27    479
2020-06-03     20
2020-06-10    172
2020-06-17    357
2020-06-24    444
2020-07-01    439
2020-07-08    785
2020-07-15    138
2020-07-22    304
2020-07-29    120
2020-08-05    114
2020-08-12     95
2020-08-19    784
2020-08-26    191
2020-09-02    234
2020-09-09    259
2020-09-16    944
2020-09-23    219
2020-09-30    279
2020-10-07    970
2020-10-14    492
2020-10-21    843
2020-10-28    600
2020-11-04    385
2020-11-11    796
2020-11-18    959
2020-11-25    719
2020-12-02    317
2020-12-09    539
2020-12-16    861
2020-12-23    895
2020-12-30    522
Freq: W, dtype: int64

ts.asfreq(pd.tseries.offsets.Hour(),fill_value=0) # 时间频率转换从天变换为小时,空数据

2020-01-01 00:00:00    921
2020-01-01 01:00:00      0
2020-01-01 02:00:00      0
2020-01-01 03:00:00      0
2020-01-01 04:00:00      0
                      ... 
2020-12-29 20:00:00      0
2020-12-29 21:00:00      0
2020-12-29 22:00:00      0
2020-12-29 23:00:00      0
2020-12-30 00:00:00    522
Freq: H, Length: 8737, dtype: int64

ts['2020/02/29']

302

13.3.4 重采样
# 时间序列重采样和 之前分组聚合有一拼
ts.resample(rule = 'M').agg(np.sum)

2020-01-31    16046
2020-02-29    13268
2020-03-31    15429
2020-04-30    18695
2020-05-31    15866
2020-06-30    12979
2020-07-31    16648
2020-08-31    15695
2020-09-30    16462
2020-10-31    20121
2020-11-30    14481
2020-12-31    13503
Freq: M, dtype: int64

ts.resample(rule = '3M').cumsum()

np.cum

# 重采样,就是按季度进行计算
ts.resample(rule='3M').agg(np.sum).cumsum()

2020-01-31     16046
2020-04-30     63438
2020-07-31    108931
2020-10-31    161209
2021-01-31    189193
Freq: 3M, dtype: int64

13.3.5 DataFrame重采样
df = pd.DataFrame(data = {'price':np.random.randint(0,100,size = 365),
                          'volume':np.random.randint(0,100,size = 365),
                          'time':pd.date_range('2020.09.15',periods=365)})
df

pricevolumetime
03772020-09-15
14812020-09-16
210882020-09-17
390662020-09-18
471772020-09-19
36020692021-09-10
36138152021-09-11
36265292021-09-12
36329842021-09-13
36423352021-09-14

365 rows × 3 columns

df.resample(rule = 'M',on = 'time').sum()

pricevolume
time
2020-09-30743745
2020-10-3115411187
2020-11-3012391428
2020-12-3116721488
2021-01-3114151570
2021-02-2813661612
2021-03-3117021620
2021-04-3015001306
2021-05-3115711791
2021-06-3014341582
2021-07-3115701681
2021-08-3116111665
2021-09-30628711
df.resample(rule = 'M',on = 'time').apply(np.sum)

pricevolume
time
2020-09-30743745
2020-10-3115411187
2020-11-3012391428
2020-12-3116721488
2021-01-3114151570
2021-02-2813661612
2021-03-3117021620
2021-04-3015001306
2021-05-3115711791
2021-06-3014341582
2021-07-3115701681
2021-08-3116111665
2021-09-30628711
df.resample(rule = 'M',on = 'time').transform(np.sum)

pricevolume
0743745
1743745
2743745
3743745
4743745
360628711
361628711
362628711
363628711
364628711

365 rows × 2 columns

第十四部分:数据可视化

14.1 线形图

df1 = pd.DataFrame(np.random.randn(1000,4),columns=list('ABCD'))
df1.cumsum().plot() # 表示绘制线

在这里插入图片描述

14.2 条形图、柱状图

df2 = pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))
df2.plot.bar(stacked = True) # 柱状图
df2.plot.barh()

在这里插入图片描述
在这里插入图片描述

14.3 饼图

df3 = pd.DataFrame(np.random.rand(4,2),columns=['one','two'],index = list('ABCD'))
df3['one'].plot.pie()
df3.plot.pie(subplots = True,figsize = (10,10),autopct = '%0.2f%%')

在这里插入图片描述
在这里插入图片描述

### 散点图

# 表示两个属性之间的关系
df4 = pd.DataFrame(np.random.randn(100,4),columns=list('ABCD'))
df4.plot.scatter(x = 'A',y = 'B')

# 一张图显示,A和C关系,同时显示B和D关系
# 返回值,视图
ax = df4.plot.scatter(x = 'A',y = 'C',color = 'DarkBlue',label = 'Group1')

# 再次向ax中绘制图形
df4.plot.scatter(x = 'B',y = 'D',color = 'DarkGreen',label = 'Group2',
                 alpha = 0.5,#透明度
                 s = np.random.randint(30,100,size = 100), # 大小各不相同
                 ax = ax) # 表示向子视图ax中继续进行绘制

在这里插入图片描述

14.4 面积图

df5 = pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))
df5.plot.area(stacked = True)

在这里插入图片描述

14.5 箱式图

# 特殊的条形图,表示数据分布情况
df6 = pd.DataFrame(np.random.randn(20,5),columns=list('ABCDE'))
df6.plot.box() # 绿色线表示中位数,上四分之一,下四分之一,表示异常值

在这里插入图片描述

df6.describe().round(2)

ABCDE
count20.0020.0020.0020.0020.00
mean-0.280.050.37-0.270.15
std1.040.990.811.040.85
min-2.12-1.48-1.21-2.41-1.55
25%-1.09-0.690.00-0.61-0.33
50%-0.13-0.090.36-0.100.21
75%0.210.540.830.390.61
max1.962.401.891.071.45

14.6 直方图

# 表示概率,分布,一种形式的条形图
df7 =pd.DataFrame(data = {'A':np.random.randn(1000) - 2,
                          'B':np.random.randn(1000),
                          'C':np.random.randn(1000) + 2})
df7.plot.hist()
df7.plot.hist(stacked = False,alpha = 0.65) # 堆叠效果

在这里插入图片描述
在这里插入图片描述

# 子视图的直方图
df7.hist(figsize = (9,9)) # 3个属性各绘制了直方图

在这里插入图片描述

结束语

上文链接:学习pandas全套代码【超详细】数据查看、输入输出、选取、集成、清洗、转换、重塑、数学和统计方法、排序

感谢收看,祝学业和工作进步! 然后还是需要本文资料的话,欢迎关注评论留下你的邮箱。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值