In [1]:
import pandas as pd
In [3]:
pd.read_csv("surveys.csv")
Out[3]:
record_id
month
day
year
plot_id
species_id
sex
hindfoot_length
weight
0
1
7
16
1977
2
NL
M
32.0
NaN
1
2
7
16
1977
3
NL
M
33.0
NaN
2
3
7
16
1977
2
DM
F
37.0
NaN
3
4
7
16
1977
7
DM
M
36.0
NaN
4
5
7
16
1977
3
DM
M
35.0
NaN
5
6
7
16
1977
1
PF
M
14.0
NaN
6
7
7
16
1977
2
PE
F
NaN
NaN
7
8
7
16
1977
1
DM
M
37.0
NaN
8
9
7
16
1977
1
DM
F
34.0
NaN
9
10
7
16
1977
6
PF
F
20.0
NaN
10
11
7
16
1977
5
DS
F
53.0
NaN
11
12
7
16
1977
7
DM
M
38.0
NaN
12
13
7
16
1977
3
DM
M
35.0
NaN
13
14
7
16
1977
8
DM
NaN
NaN
NaN
14
15
7
16
1977
6
DM
F
36.0
NaN
15
16
7
16
1977
4
DM
F
36.0
NaN
16
17
7
16
1977
3
DS
F
48.0
NaN
17
18
7
16
1977
2
PP
M
22.0
NaN
18
19
7
16
1977
4
PF
NaN
NaN
NaN
19
20
7
17
1977
11
DS
F
48.0
NaN
20
21
7
17
1977
14
DM
F
34.0
NaN
21
22
7
17
1977
15
NL
F
31.0
NaN
22
23
7
17
1977
13
DM
M
36.0
NaN
23
24
7
17
1977
13
SH
M
21.0
NaN
24
25
7
17
1977
9
DM
M
35.0
NaN
25
26
7
17
1977
15
DM
M
31.0
NaN
26
27
7
17
1977
15
DM
M
36.0
NaN
27
28
7
17
1977
11
DM
M
38.0
NaN
28
29
7
17
1977
11
PP
M
NaN
NaN
29
30
7
17
1977
10
DS
F
52.0
NaN
...
...
...
...
...
...
...
...
...
...
35519
35520
12
31
2002
9
SF
NaN
24.0
36.0
35520
35521
12
31
2002
9
DM
M
37.0
48.0
35521
35522
12
31
2002
9
DM
F
35.0
45.0
35522
35523
12
31
2002
9
DM
F
36.0
44.0
35523
35524
12
31
2002
9
PB
F
25.0
27.0
35524
35525
12
31
2002
9
OL
M
21.0
26.0
35525
35526
12
31
2002
8
OT
F
20.0
24.0
35526
35527
12
31
2002
13
DO
F
33.0
43.0
35527
35528
12
31
2002
13
US
NaN
NaN
NaN
35528
35529
12
31
2002
13
PB
F
25.0
25.0
35529
35530
12
31
2002
13
OT
F
20.0
NaN
35530
35531
12
31
2002
13
PB
F
27.0
NaN
35531
35532
12
31
2002
14
DM
F
34.0
43.0
35532
35533
12
31
2002
14
DM
F
36.0
48.0
35533
35534
12
31
2002
14
DM
M
37.0
56.0
35534
35535
12
31
2002
14
DM
M
37.0
53.0
35535
35536
12
31
2002
14
DM
F
35.0
42.0
35536
35537
12
31
2002
14
DM
F
36.0
46.0
35537
35538
12
31
2002
15
PB
F
26.0
31.0
35538
35539
12
31
2002
15
SF
M
26.0
68.0
35539
35540
12
31
2002
15
PB
F
26.0
23.0
35540
35541
12
31
2002
15
PB
F
24.0
31.0
35541
35542
12
31
2002
15
PB
F
26.0
29.0
35542
35543
12
31
2002
15
PB
F
27.0
34.0
35543
35544
12
31
2002
15
US
NaN
NaN
NaN
35544
35545
12
31
2002
15
AH
NaN
NaN
NaN
35545
35546
12
31
2002
15
AH
NaN
NaN
NaN
35546
35547
12
31
2002
10
RM
F
15.0
14.0
35547
35548
12
31
2002
7
DO
M
36.0
51.0
35548
35549
12
31
2002
5
NaN
NaN
NaN
NaN
35549 rows × 9 columns
In [5]:
surveys_df = pd.read_csv("surveys.csv")
In [6]:
surveys_df
Out[6]:
record_id
month
day
year
plot_id
species_id
sex
hindfoot_length
weight
0
1
7
16
1977
2
NL
M
32.0
NaN
1
2
7
16
1977
3
NL
M
33.0
NaN
2
3
7
16
1977
2
DM
F
37.0
NaN
3
4
7
16
1977
7
DM
M
36.0
NaN
4
5
7
16
1977
3
DM
M
35.0
NaN
5
6
7
16
1977
1
PF
M
14.0
NaN
6
7
7
16
1977
2
PE
F
NaN
NaN
7
8
7
16
1977
1
DM
M
37.0
NaN
8
9
7
16
1977
1
DM
F
34.0
NaN
9
10
7
16
1977
6
PF
F
20.0
NaN
10
11
7
16
1977
5
DS
F
53.0
NaN
11
12
7
16
1977
7
DM
M
38.0
NaN
12
13
7
16
1977
3
DM
M
35.0
NaN
13
14
7
16
1977
8
DM
NaN
NaN
NaN
14
15
7
16
1977
6
DM
F
36.0
NaN
15
16
7
16
1977
4
DM
F
36.0
NaN
16
17
7
16
1977
3
DS
F
48.0
NaN
17
18
7
16
1977
2
PP
M
22.0
NaN
18
19
7
16
1977
4
PF
NaN
NaN
NaN
19
20
7
17
1977
11
DS
F
48.0
NaN
20
21
7
17
1977
14
DM
F
34.0
NaN
21
22
7
17
1977
15
NL
F
31.0
NaN
22
23
7
17
1977
13
DM
M
36.0
NaN
23
24
7
17
1977
13
SH
M
21.0
NaN
24
25
7
17
1977
9
DM
M
35.0
NaN
25
26
7
17
1977
15
DM
M
31.0
NaN
26
27
7
17
1977
15
DM
M
36.0
NaN
27
28
7
17
1977
11
DM
M
38.0
NaN
28
29
7
17
1977
11
PP
M
NaN
NaN
29
30
7
17
1977
10
DS
F
52.0
NaN
...
...
...
...
...
...
...
...
...
...
35519
35520
12
31
2002
9
SF
NaN
24.0
36.0
35520
35521
12
31
2002
9
DM
M
37.0
48.0
35521
35522
12
31
2002
9
DM
F
35.0
45.0
35522
35523
12
31
2002
9
DM
F
36.0
44.0
35523
35524
12
31
2002
9
PB
F
25.0
27.0
35524
35525
12
31
2002
9
OL
M
21.0
26.0
35525
35526
12
31
2002
8
OT
F
20.0
24.0
35526
35527
12
31
2002
13
DO
F
33.0
43.0
35527
35528
12
31
2002
13
US
NaN
NaN
NaN
35528
35529
12
31
2002
13
PB
F
25.0
25.0
35529
35530
12
31
2002
13
OT
F
20.0
NaN
35530
35531
12
31
2002
13
PB
F
27.0
NaN
35531
35532
12
31
2002
14
DM
F
34.0
43.0
35532
35533
12
31
2002
14
DM
F
36.0
48.0
35533
35534
12
31
2002
14
DM
M
37.0
56.0
35534
35535
12
31
2002
14
DM
M
37.0
53.0
35535
35536
12
31
2002
14
DM
F
35.0
42.0
35536
35537
12
31
2002
14
DM
F
36.0
46.0
35537
35538
12
31
2002
15
PB
F
26.0
31.0
35538
35539
12
31
2002
15
SF
M
26.0
68.0
35539
35540
12
31
2002
15
PB
F
26.0
23.0
35540
35541
12
31
2002
15
PB
F
24.0
31.0
35541
35542
12
31
2002
15
PB
F
26.0
29.0
35542
35543
12
31
2002
15
PB
F
27.0
34.0
35543
35544
12
31
2002
15
US
NaN
NaN
NaN
35544
35545
12
31
2002
15
AH
NaN
NaN
NaN
35545
35546
12
31
2002
15
AH
NaN
NaN
NaN
35546
35547
12
31
2002
10
RM
F
15.0
14.0
35547
35548
12
31
2002
7
DO
M
36.0
51.0
35548
35549
12
31
2002
5
NaN
NaN
NaN
NaN
35549 rows × 9 columns
In [8]:
type(surveys_df)
Out[8]:
pandas.core.frame.DataFrame
In [9]:
surveys_df.dtypes
Out[9]:
record_id int64
month int64
day int64
year int64
plot_id int64
species_id object
sex object
hindfoot_length float64
weight float64
dtype: object
In [10]:
surveys_df.columns
Out[10]:
Index(['record_id', 'month', 'day', 'year', 'plot_id', 'species_id', 'sex',
'hindfoot_length', 'weight'],
dtype='object')
In [12]:
surveys_df.head()
Out[12]:
record_id
month
day
year
plot_id
species_id
sex
hindfoot_length
weight
0
1
7
16
1977
2
NL
M
32.0
NaN
1
2
7
16
1977
3
NL
M
33.0
NaN
2
3
7
16
1977
2
DM
F
37.0
NaN
3
4
7
16
1977
7
DM
M
36.0
NaN
4
5
7
16
1977
3
DM
M
35.0
NaN
In [13]:
surveys_df.tail()
Out[13]:
record_id
month
day
year
plot_id
species_id
sex
hindfoot_length
weight
35544
35545
12
31
2002
15
AH
NaN
NaN
NaN
35545
35546
12
31
2002
15
AH
NaN
NaN
NaN
35546
35547
12
31
2002
10
RM
F
15.0
14.0
35547
35548
12
31
2002
7
DO
M
36.0
51.0
35548
35549
12
31
2002
5
NaN
NaN
NaN
NaN
In [14]:
surveys_df.shape
Out[14]:
(35549, 9)
In [15]:
surveys_df['day']
Out[15]:
0 16
1 16
2 16
3 16
4 16
5 16
6 16
7 16
8 16
9 16
10 16
11 16
12 16
13 16
14 16
15 16
16 16
17 16
18 16
19 17
20 17
21 17
22 17
23 17
24 17
25 17
26 17
27 17
28 17
29 17
..
35519 31
35520 31
35521 31
35522 31
35523 31
35524 31
35525 31
35526 31
35527 31
35528 31
35529 31
35530 31
35531 31
35532 31
35533 31
35534 31
35535 31
35536 31
35537 31
35538 31
35539 31
35540 31
35541 31
35542 31
35543 31
35544 31
35545 31
35546 31
35547 31
35548 31
Name: day, dtype: int64
In [16]:
pd.unique(surveys_df['sex'])
Out[16]:
array(['M', 'F', nan], dtype=object)
In [18]:
pd.unique(surveys_df['species_id'])
Out[18]:
array(['NL', 'DM', 'PF', 'PE', 'DS', 'PP', 'SH', 'OT', 'DO', 'OX', 'SS',
'OL', 'RM', nan, 'SA', 'PM', 'AH', 'DX', 'AB', 'CB', 'CM', 'CQ',
'RF', 'PC', 'PG', 'PH', 'PU', 'CV', 'UR', 'UP', 'ZL', 'UL', 'CS',
'SC', 'BA', 'SF', 'RO', 'AS', 'SO', 'PI', 'ST', 'CU', 'SU', 'RX',
'PB', 'PL', 'PX', 'CT', 'US'], dtype=object)
In [19]:
pd.unique(surveys_df['plot_id'])
Out[19]:
array([ 2, 3, 7, 1, 6, 5, 8, 4, 11, 14, 15, 13, 9, 10, 17, 16, 20,
23, 18, 21, 22, 19, 12, 24])
In [20]:
surveys_df['weight'].describe()
Out[20]:
count 32283.000000
mean 42.672428
std 36.631259
min 4.000000
25% 20.000000
50% 37.000000
75% 48.000000
max 280.000000
Name: weight, dtype: float64
In [21]:
surveys_df['weight'].count()
Out[21]:
32283
In [22]:
surveys_df['weight'].min()
Out[22]:
4.0
In [26]:
surveys_df['weight'].quantile(0.25)
Out[26]:
20.0
In [27]:
sorted = surveys_df.groupby('sex')
In [28]:
sorted.describe()
Out[28]:
day
hindfoot_length
month
plot_id
record_id
weight
year
sex
F
count
15690.000000
14894.000000
15690.000000
15690.000000
15690.000000
15303.000000
15690.000000
mean
16.007138
28.836780
6.583047
11.440854
18036.412046
42.170555
1990.644997
std
8.271144
9.463789
3.367350
6.870684
10423.089000
36.847958
7.598725
min
1.000000
7.000000
1.000000
1.000000
3.000000
4.000000
1977.000000
25%
9.000000
21.000000
4.000000
5.000000
8917.500000
20.000000
1984.000000
50%
16.000000
27.000000
7.000000
12.000000
18075.500000
34.000000
1990.000000
75%
23.000000
36.000000
10.000000
17.000000
27250.000000
46.000000
1997.000000
max
31.000000
64.000000
12.000000
24.000000
35547.000000
274.000000
2002.000000
M
count
17348.000000
16476.000000
17348.000000
17348.000000
17348.000000
16879.000000
17348.000000
mean
16.184286
29.709578
6.392668
11.098282
17754.835601
42.995379
1990.480401
std
8.199274
9.629246
3.420806
6.728713
10132.203323
36.184981
7.403655
min
1.000000
2.000000
1.000000
1.000000
1.000000
4.000000
1977.000000
25%
9.000000
21.000000
3.000000
5.000000
8969.750000
20.000000
1984.000000
50%
16.000000
34.000000
6.000000
11.000000
17727.500000
39.000000
1990.000000
75%
23.000000
36.000000
9.000000
17.000000
26454.250000
49.000000
1997.000000
max
31.000000
58.000000
12.000000
24.000000
35548.000000
280.000000
2002.000000
In [30]:
sorted['weight'].mean()
Out[30]:
sex
F 42.170555
M 42.995379
Name: weight, dtype: float64
In [31]:
sorted2 = surveys_df.groupby(['sex', 'plot_id'])
In [34]:
sorted2['weight'].mean()
Out[34]:
sex plot_id
F 1 46.311138
2 52.561845
3 31.215349
4 46.818824
5 40.974806
6 36.352288
7 20.006135
8 45.623011
9 53.618469
10 17.094203
11 43.515075
12 49.831731
13 40.524590
14 47.355491
15 26.670236
16 25.810427
17 48.176201
18 36.963514
19 21.978599
20 52.624406
21 25.974832
22 53.647059
23 20.564417
24 47.914405
M 1 55.950560
2 51.391382
3 34.163241
4 48.888119
5 40.708551
6 36.867388
7 21.194719
8 49.641372
9 49.519309
10 19.971223
11 43.366197
12 48.909710
13 40.097754
14 45.159378
15 27.523691
16 23.811321
17 47.558853
18 43.546952
19 20.306878
20 44.197279
21 22.772622
22 54.572531
23 18.941463
24 39.321503
Name: weight, dtype: float64
In [38]:
sorted.count()
Out[38]:
record_id
month
day
year
plot_id
species_id
hindfoot_length
weight
sex
F
15690
15690
15690
15690
15690
15690
14894
15303
M
17348
17348
17348
17348
17348
17348
16476
16879
In [39]:
species_counts = surveys_df.groupby('species_id').count()
In [40]:
species_counts
Out[40]:
record_id
month
day
year
plot_id
sex
hindfoot_length
weight
species_id
AB
303
303
303
303
303
0
0
0
AH
437
437
437
437
437
1
2
0
AS
2
2
2
2
2
0
0
0
BA
46
46
46
46
46
45
45
45
CB
50
50
50
50
50
0
0
0
CM
13
13
13
13
13
0
0
0
CQ
16
16
16
16
16
0
0
0
CS
1
1
1
1
1
0
0
0
CT
1
1
1
1
1
0
0
0
CU
1
1
1
1
1
0
0
0
CV
1
1
1
1
1
0
0
0
DM
10596
10596
10596
10596
10596
10523
9972
10262
DO
3027
3027
3027
3027
3027
3015
2887
2904
DS
2504
2504
2504
2504
2504
2458
2132
2344
DX
40
40
40
40
40
0
0
0
NL
1252
1252
1252
1252
1252
1177
1074
1152
OL
1006
1006
1006
1006
1006
987
920
970
OT
2249
2249
2249
2249
2249
2213
2139
2160
OX
12
12
12
12
12
9
8
6
PB
2891
2891
2891
2891
2891
2862
2864
2810
PC
39
39
39
39
39
0
0
0
PE
1299
1299
1299
1299
1299
1277
1212
1260
PF
1597
1597
1597
1597
1597
1573
1493
1548
PG
8
8
8
8
8
0
0
0
PH
32
32
32
32
32
32
31
31
PI
9
9
9
9
9
8
9
8
PL
36
36
36
36
36
35
36
36
PM
899
899
899
899
899
883
847
876
PP
3123
3123
3123
3123
3123
3076
3027
3024
PU
5
5
5
5
5
0
0
0
PX
6
6
6
6
6
2
2
2
RF
75
75
75
75
75
75
73
75
RM
2609
2609
2609
2609
2609
2548
2442
2535
RO
8
8
8
8
8
8
8
8
RX
2
2
2
2
2
2
2
2
SA
75
75
75
75
75
0
0
0
SC
1
1
1
1
1
0
0
0
SF
43
43
43
43
43
40
41
41
SH
147
147
147
147
147
143
131
141
SO
43
43
43
43
43
43
41
41
SS
248
248
248
248
248
3
0
2
ST
1
1
1
1
1
0
0
0
SU
5
5
5
5
5
0
0
0
UL
4
4
4
4
4
0
0
0
UP
8
8
8
8
8
0
0
0
UR
10
10
10
10
10
0
0
0
US
4
4
4
4
4
0
0
0
ZL
2
2
2
2
2
0
0
0
In [41]:
surveys_df['weight']*5
Out[41]:
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
10 NaN
11 NaN
12 NaN
13 NaN
14 NaN
15 NaN
16 NaN
17 NaN
18 NaN
19 NaN
20 NaN
21 NaN
22 NaN
23 NaN
24 NaN
25 NaN
26 NaN
27 NaN
28 NaN
29 NaN
...
35519 180.0
35520 240.0
35521 225.0
35522 220.0
35523 135.0
35524 130.0
35525 120.0
35526 215.0
35527 NaN
35528 125.0
35529 NaN
35530 NaN
35531 215.0
35532 240.0
35533 280.0
35534 265.0
35535 210.0
35536 230.0
35537 155.0
35538 340.0
35539 115.0
35540 155.0
35541 145.0
35542 170.0
35543 NaN
35544 NaN
35545 NaN
35546 70.0
35547 255.0
35548 NaN
Name: weight, dtype: float64
In [43]:
surveys_df['weight2'] = surveys_df['weight']*5
In [45]:
del surveys_df['weight2']
In [46]:
%matplotlib inline
/Users/lucymorris/anaconda/lib/python3.5/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
/Users/lucymorris/anaconda/lib/python3.5/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
In [49]:
species_counts = surveys_df.groupby('species_id').count()
species_counts.plot(kind='bar')
Out[49]:
<matplotlib.axes._subplots.AxesSubplot at 0x115706978>
In [52]:
total_count = surveys_df['species_id'].groupby(surveys_df['plot_id']).nunique()
In [53]:
total_count
Out[53]:
plot_id
1 23
2 28
3 30
4 20
5 26
6 23
7 21
8 23
9 24
10 23
11 29
12 25
13 26
14 23
15 26
16 22
17 21
18 26
19 27
20 25
21 26
22 23
23 27
24 21
dtype: int64
In [54]:
total_count.plot(kind='bar')
Out[54]:
<matplotlib.axes._subplots.AxesSubplot at 0x113385a90>
In [2]:
surveys_df = pd.read_csv("surveys.csv")
In [3]:
surveys_df
Out[3]:
record_id
month
day
year
plot_id
species_id
sex
hindfoot_length
weight
0
1
7
16
1977
2
NL
M
32.0
NaN
1
2
7
16
1977
3
NL
M
33.0
NaN
2
3
7
16
1977
2
DM
F
37.0
NaN
3
4
7
16
1977
7
DM
M
36.0
NaN
4
5
7
16
1977
3
DM
M
35.0
NaN
5
6
7
16
1977
1
PF
M
14.0
NaN
6
7
7
16
1977
2
PE
F
NaN
NaN
7
8
7
16
1977
1
DM
M
37.0
NaN
8
9
7
16
1977
1
DM
F
34.0
NaN
9
10
7
16
1977
6
PF
F
20.0
NaN
10
11
7
16
1977
5
DS
F
53.0
NaN
11
12
7
16
1977
7
DM
M
38.0
NaN
12
13
7
16
1977
3
DM
M
35.0
NaN
13
14
7
16
1977
8
DM
NaN
NaN
NaN
14
15
7
16
1977
6
DM
F
36.0
NaN
15
16
7
16
1977
4
DM
F
36.0
NaN
16
17
7
16
1977
3
DS
F
48.0
NaN
17
18
7
16
1977
2
PP
M
22.0
NaN
18
19
7
16
1977
4
PF
NaN
NaN
NaN
19
20
7
17
1977
11
DS
F
48.0
NaN
20
21
7
17
1977
14
DM
F
34.0
NaN
21
22
7
17
1977
15
NL
F
31.0
NaN
22
23
7
17
1977
13
DM
M
36.0
NaN
23
24
7
17
1977
13
SH
M
21.0
NaN
24
25
7
17
1977
9
DM
M
35.0
NaN
25
26
7
17
1977
15
DM
M
31.0
NaN
26
27
7
17
1977
15
DM
M
36.0
NaN
27
28
7
17
1977
11
DM
M
38.0
NaN
28
29
7
17
1977
11
PP
M
NaN
NaN
29
30
7
17
1977
10
DS
F
52.0
NaN
...
...
...
...
...
...
...
...
...
...
35519
35520
12
31
2002
9
SF
NaN
24.0
36.0
35520
35521
12
31
2002
9
DM
M
37.0
48.0
35521
35522
12
31
2002
9
DM
F
35.0
45.0
35522
35523
12
31
2002
9
DM
F
36.0
44.0
35523
35524
12
31
2002
9
PB
F
25.0
27.0
35524
35525
12
31
2002
9
OL
M
21.0
26.0
35525
35526
12
31
2002
8
OT
F
20.0
24.0
35526
35527
12
31
2002
13
DO
F
33.0
43.0
35527
35528
12
31
2002
13
US
NaN
NaN
NaN
35528
35529
12
31
2002
13
PB
F
25.0
25.0
35529
35530
12
31
2002
13
OT
F
20.0
NaN
35530
35531
12
31
2002
13
PB
F
27.0
NaN
35531
35532
12
31
2002
14
DM
F
34.0
43.0
35532
35533
12
31
2002
14
DM
F
36.0
48.0
35533
35534
12
31
2002
14
DM
M
37.0
56.0
35534
35535
12
31
2002
14
DM
M
37.0
53.0
35535
35536
12
31
2002
14
DM
F
35.0
42.0
35536
35537
12
31
2002
14
DM
F
36.0
46.0
35537
35538
12
31
2002
15
PB
F
26.0
31.0
35538
35539
12
31
2002
15
SF
M
26.0
68.0
35539
35540
12
31
2002
15
PB
F
26.0
23.0
35540
35541
12
31
2002
15
PB
F
24.0
31.0
35541
35542
12
31
2002
15
PB
F
26.0
29.0
35542
35543
12
31
2002
15
PB
F
27.0
34.0
35543
35544
12
31
2002
15
US
NaN
NaN
NaN
35544
35545
12
31
2002
15
AH
NaN
NaN
NaN
35545
35546
12
31
2002
15
AH
NaN
NaN
NaN
35546
35547
12
31
2002
10
RM
F
15.0
14.0
35547
35548
12
31
2002
7
DO
M
36.0
51.0
35548
35549
12
31
2002
5
NaN
NaN
NaN
NaN
35549 rows × 9 columns
In [4]:
species_df = pd.read_csv("species.csv")
In [5]:
species_df
Out[5]:
species_id
genus
species
taxa
0
AB
Amphispiza
bilineata
Bird
1
AH
Ammospermophilus
harrisi
Rodent
2
AS
Ammodramus
savannarum
Bird
3
BA
Baiomys
taylori
Rodent
4
CB
Campylorhynchus
brunneicapillus
Bird
5
CM
Calamospiza
melanocorys
Bird
6
CQ
Callipepla
squamata
Bird
7
CS
Crotalus
scutalatus
Reptile
8
CT
Cnemidophorus
tigris
Reptile
9
CU
Cnemidophorus
uniparens
Reptile
10
CV
Crotalus
viridis
Reptile
11
DM
Dipodomys
merriami
Rodent
12
DO
Dipodomys
ordii
Rodent
13
DS
Dipodomys
spectabilis
Rodent
14
DX
Dipodomys
sp.
Rodent
15
EO
Eumeces
obsoletus
Reptile
16
GS
Gambelia
silus
Reptile
17
NL
Neotoma
albigula
Rodent
18
NX
Neotoma
sp.
Rodent
19
OL
Onychomys
leucogaster
Rodent
20
OT
Onychomys
torridus
Rodent
21
OX
Onychomys
sp.
Rodent
22
PB
Chaetodipus
baileyi
Rodent
23
PC
Pipilo
chlorurus
Bird
24
PE
Peromyscus
eremicus
Rodent
25
PF
Perognathus
flavus
Rodent
26
PG
Pooecetes
gramineus
Bird
27
PH
Perognathus
hispidus
Rodent
28
PI
Chaetodipus
intermedius
Rodent
29
PL
Peromyscus
leucopus
Rodent
30
PM
Peromyscus
maniculatus
Rodent
31
PP
Chaetodipus
penicillatus
Rodent
32
PU
Pipilo
fuscus
Bird
33
PX
Chaetodipus
sp.
Rodent
34
RF
Reithrodontomys
fulvescens
Rodent
35
RM
Reithrodontomys
megalotis
Rodent
36
RO
Reithrodontomys
montanus
Rodent
37
RX
Reithrodontomys
sp.
Rodent
38
SA
Sylvilagus
audubonii
Rabbit
39
SB
Spizella
breweri
Bird
40
SC
Sceloporus
clarki
Reptile
41
SF
Sigmodon
fulviventer
Rodent
42
SH
Sigmodon
hispidus
Rodent
43
SO
Sigmodon
ochrognathus
Rodent
44
SS
Spermophilus
spilosoma
Rodent
45
ST
Spermophilus
tereticaudus
Rodent
46
SU
Sceloporus
undulatus
Reptile
47
SX
Sigmodon
sp.
Rodent
48
UL
Lizard
sp.
Reptile
49
UP
Pipilo
sp.
Bird
50
UR
Rodent
sp.
Rodent
51
US
Sparrow
sp.
Bird
52
ZL
Zonotrichia
leucophrys
Bird
53
ZM
Zenaida
macroura
Bird
In [6]:
surveySub = surveys_df.head(10)
In [7]:
surveySub
Out[7]:
record_id
month
day
year
plot_id
species_id
sex
hindfoot_length
weight
0
1
7
16
1977
2
NL
M
32.0
NaN
1
2
7
16
1977
3
NL
M
33.0
NaN
2
3
7
16
1977
2
DM
F
37.0
NaN
3
4
7
16
1977
7
DM
M
36.0
NaN
4
5
7
16
1977
3
DM
M
35.0
NaN
5
6
7
16
1977
1
PF
M
14.0
NaN
6
7
7
16
1977
2
PE
F
NaN
NaN
7
8
7
16
1977
1
DM
M
37.0
NaN
8
9
7
16
1977
1
DM
F
34.0
NaN
9
10
7
16
1977
6
PF
F
20.0
NaN
In [9]:
surveySubLast10 = surveys_df[-11:-1]
In [10]:
surveySubLast10
Out[10]:
record_id
month
day
year
plot_id
species_id
sex
hindfoot_length
weight
35538
35539
12
31
2002
15
SF
M
26.0
68.0
35539
35540
12
31
2002
15
PB
F
26.0
23.0
35540
35541
12
31
2002
15
PB
F
24.0
31.0
35541
35542
12
31
2002
15
PB
F
26.0
29.0
35542
35543
12
31
2002
15
PB
F
27.0
34.0
35543
35544
12
31
2002
15
US
NaN
NaN
NaN
35544
35545
12
31
2002
15
AH
NaN
NaN
NaN
35545
35546
12
31
2002
15
AH
NaN
NaN
NaN
35546
35547
12
31
2002
10
RM
F
15.0
14.0
35547
35548
12
31
2002
7
DO
M
36.0
51.0
In [14]:
surveySubLast10 = surveySubLast10.reset_index(drop=True)
In [17]:
vertical_stack = pd.concat([surveySub, surveySubLast10], axis = 0)
vertical_stack
Out[17]:
record_id
month
day
year
plot_id
species_id
sex
hindfoot_length
weight
0
1
7
16
1977
2
NL
M
32.0
NaN
1
2
7
16
1977
3
NL
M
33.0
NaN
2
3
7
16
1977
2
DM
F
37.0
NaN
3
4
7
16
1977
7
DM
M
36.0
NaN
4
5
7
16
1977
3
DM
M
35.0
NaN
5
6
7
16
1977
1
PF
M
14.0
NaN
6
7
7
16
1977
2
PE
F
NaN
NaN
7
8
7
16
1977
1
DM
M
37.0
NaN
8
9
7
16
1977
1
DM
F
34.0
NaN
9
10
7
16
1977
6
PF
F
20.0
NaN
0
35539
12
31
2002
15
SF
M
26.0
68.0
1
35540
12
31
2002
15
PB
F
26.0
23.0
2
35541
12
31
2002
15
PB
F
24.0
31.0
3
35542
12
31
2002
15
PB
F
26.0
29.0
4
35543
12
31
2002
15
PB
F
27.0
34.0
5
35544
12
31
2002
15
US
NaN
NaN
NaN
6
35545
12
31
2002
15
AH
NaN
NaN
NaN
7
35546
12
31
2002
15
AH
NaN
NaN
NaN
8
35547
12
31
2002
10
RM
F
15.0
14.0
9
35548
12
31
2002
7
DO
M
36.0
51.0
In [18]:
vertical_stack.to_csv('out.csv')
In [19]:
surveys_1980 = surveys_df[surveys_df.year == 1980]
In [20]:
surveys_1982 = surveys_df[surveys_df.year == 1982]
In [23]:
surveys_1980_1982 = pd.concat([surveys_1980, surveys_1982], axis = 0)
surveys_1980_1982 = surveys_1980_1982.reset_index(drop=True)
surveys_1980_1982
Out[23]:
record_id
month
day
year
plot_id
species_id
sex
hindfoot_length
weight
0
2271
1
15
1980
8
DO
M
35.0
53.0
1
2272
1
15
1980
11
PF
F
16.0
10.0
2
2273
1
15
1980
18
DM
F
34.0
33.0
3
2274
1
15
1980
11
DM
M
38.0
37.0
4
2275
1
15
1980
8
DO
F
33.0
29.0
5
2276
1
15
1980
11
DS
M
47.0
132.0
6
2277
1
15
1980
8
PF
M
15.0
8.0
7
2278
1
15
1980
9
OT
M
21.0
23.0
8
2279
1
15
1980
11
DM
F
36.0
36.0
9
2280
1
15
1980
21
OT
F
20.0
21.0
10
2281
1
15
1980
11
OL
M
20.0
29.0
11
2282
1
15
1980
17
DM
F
36.0
49.0
12
2283
1
15
1980
11
OL
M
21.0
23.0
13
2284
1
15
1980
9
OL
M
20.0
32.0
14
2285
1
15
1980
10
OL
F
20.0
24.0
15
2286
1
15
1980
11
DM
M
38.0
47.0
16
2287
1
15
1980
21
OT
M
19.0
22.0
17
2288
1
15
1980
19
RM
F
17.0
12.0
18
2289
1
15
1980
20
DS
F
52.0
150.0
19
2290
1
15
1980
11
DM
M
37.0
49.0
20
2291
1
15
1980
9
OL
F
21.0
34.0
21
2292
1
15
1980
12
DM
F
35.0
40.0
22
2293
1
15
1980
18
DS
F
51.0
132.0
23
2294
1
15
1980
22
DM
F
34.0
25.0
24
2295
1
15
1980
9
OL
M
21.0
36.0
25
2296
1
15
1980
8
DO
F
34.0
50.0
26
2297
1
15
1980
11
DM
M
37.0
45.0
27
2298
1
15
1980
17
DM
M
35.0
47.0
28
2299
1
15
1980
9
DM
M
38.0
46.0
29
2300
1
15
1980
18
DM
F
32.0
29.0
...
...
...
...
...
...
...
...
...
...
3363
7106
11
22
1982
9
DS
F
50.0
132.0
3364
7107
11
22
1982
1
DO
M
36.0
50.0
3365
7108
11
22
1982
12
PF
F
16.0
7.0
3366
7109
11
22
1982
9
DS
M
49.0
130.0
3367
7110
11
22
1982
11
PF
M
16.0
6.0
3368
7111
11
22
1982
4
PF
M
15.0
6.0
3369
7112
11
22
1982
1
DO
F
34.0
49.0
3370
7113
11
22
1982
4
DS
F
52.0
119.0
3371
7114
11
22
1982
11
DS
F
51.0
111.0
3372
7115
11
22
1982
1
OL
M
19.0
26.0
3373
7116
11
22
1982
2
DO
F
35.0
45.0
3374
7117
11
22
1982
4
DM
F
33.0
45.0
3375
7118
11
22
1982
1
OL
M
21.0
39.0
3376
7119
11
22
1982
2
DO
F
36.0
43.0
3377
7120
11
22
1982
5
DM
M
37.0
46.0
3378
7121
11
22
1982
8
DS
F
50.0
106.0
3379
7122
11
22
1982
8
PF
M
15.0
6.0
3380
7123
11
22
1982
1
DM
F
33.0
35.0
3381
7124
11
22
1982
3
PF
M
15.0
6.0
3382
7125
11
22
1982
4
DS
F
48.0
122.0
3383
7126
11
22
1982
5
DM
M
35.0
41.0
3384
7127
11
22
1982
5
OL
M
22.0
43.0
3385
7128
11
22
1982
9
DM
F
33.0
36.0
3386
7129
11
22
1982
12
DS
F
48.0
102.0
3387
7130
11
22
1982
1
DM
M
37.0
48.0
3388
7131
11
22
1982
6
OT
F
19.0
27.0
3389
7132
11
22
1982
11
DM
M
36.0
45.0
3390
7133
11
22
1982
1
DM
F
34.0
35.0
3391
7134
11
22
1982
6
OT
M
21.0
24.0
3392
7135
11
22
1982
12
DM
M
37.0
41.0
3393 rows × 9 columns
In [22]:
surveys_1980_1982.to_csv('year.csv')
In [25]:
surveySub = surveys_df.head(10)
In [26]:
surveySub.columns
Out[26]:
Index(['record_id', 'month', 'day', 'year', 'plot_id', 'species_id', 'sex',
'hindfoot_length', 'weight'],
dtype='object')
In [27]:
species_df.columns
Out[27]:
Index(['species_id', 'genus', 'species', 'taxa'], dtype='object')
In [35]:
merged_inner = pd.merge(left=species_df, left_on = 'species_id', right=surveys_df, right_on = 'species_id')
merged_inner
Out[35]:
species_id
genus
species
taxa
record_id
month
day
year
plot_id
sex
hindfoot_length
weight
0
AB
Amphispiza
bilineata
Bird
3126
7
21
1980
8
NaN
NaN
NaN
1
AB
Amphispiza
bilineata
Bird
3146
7
21
1980
24
NaN
NaN
NaN
2
AB
Amphispiza
bilineata
Bird
3152
7
21
1980
19
NaN
NaN
NaN
3
AB
Amphispiza
bilineata
Bird
3153
7
21
1980
22
NaN
NaN
NaN
4
AB
Amphispiza
bilineata
Bird
3586
12
15
1980
16
NaN
NaN
NaN
5
AB
Amphispiza
bilineata
Bird
3702
1
11
1981
22
NaN
NaN
NaN
6
AB
Amphispiza
bilineata
Bird
3705
1
11
1981
22
NaN
NaN
NaN
7
AB
Amphispiza
bilineata
Bird
3706
1
11
1981
20
NaN
NaN
NaN
8
AB
Amphispiza
bilineata
Bird
3775
1
12
1981
6
NaN
NaN
NaN
9
AB
Amphispiza
bilineata
Bird
4499
6
4
1981
23
NaN
NaN
NaN
10
AB
Amphispiza
bilineata
Bird
4543
6
4
1981
23
NaN
NaN
NaN
11
AB
Amphispiza
bilineata
Bird
4606
7
7
1981
19
NaN
NaN
NaN
12
AB
Amphispiza
bilineata
Bird
5203
1
24
1982
12
NaN
NaN
NaN
13
AB
Amphispiza
bilineata
Bird
5204
1
24
1982
12
NaN
NaN
NaN
14
AB
Amphispiza
bilineata
Bird
5220
1
24
1982
20
NaN
NaN
NaN
15
AB
Amphispiza
bilineata
Bird
5222
1
24
1982
24
NaN
NaN
NaN
16
AB
Amphispiza
bilineata
Bird
5229
1
24
1982
12
NaN
NaN
NaN
17
AB
Amphispiza
bilineata
Bird
5244
1
24
1982
19
NaN
NaN
NaN
18
AB
Amphispiza
bilineata
Bird
5256
1
24
1982
12
NaN
NaN
NaN
19
AB
Amphispiza
bilineata
Bird
5267
1
24
1982
7
NaN
NaN
NaN
20
AB
Amphispiza
bilineata
Bird
5302
1
25
1982
2
NaN
NaN
NaN
21
AB
Amphispiza
bilineata
Bird
5310
1
25
1982
2
NaN
NaN
NaN
22
AB
Amphispiza
bilineata
Bird
5313
1
25
1982
13
NaN
NaN
NaN
23
AB
Amphispiza
bilineata
Bird
5387
2
23
1982
13
NaN
NaN
NaN
24
AB
Amphispiza
bilineata
Bird
5488
2
24
1982
2
NaN
NaN
NaN
25
AB
Amphispiza
bilineata
Bird
5496
2
24
1982
2
NaN
NaN
NaN
26
AB
Amphispiza
bilineata
Bird
5535
3
29
1982
18
NaN
NaN
NaN
27
AB
Amphispiza
bilineata
Bird
5643
3
30
1982
9
NaN
NaN
NaN
28
AB
Amphispiza
bilineata
Bird
5687
4
28
1982
19
NaN
NaN
NaN
29
AB
Amphispiza
bilineata
Bird
5741
4
28
1982
20
NaN
NaN
NaN
...
...
...
...
...
...
...
...
...
...
...
...
...
34756
SU
Sceloporus
undulatus
Reptile
22251
4
29
1995
20
NaN
NaN
NaN
34757
SU
Sceloporus
undulatus
Reptile
22264
4
30
1995
11
NaN
NaN
NaN
34758
UL
Lizard
sp.
Reptile
14466
5
14
1988
17
NaN
NaN
NaN
34759
UL
Lizard
sp.
Reptile
19952
5
2
1992
2
NaN
NaN
NaN
34760
UL
Lizard
sp.
Reptile
21594
5
19
1994
13
NaN
NaN
NaN
34761
UL
Lizard
sp.
Reptile
21601
5
19
1994
8
NaN
NaN
NaN
34762
UP
Pipilo
sp.
Bird
13688
11
21
1987
12
NaN
NaN
NaN
34763
UP
Pipilo
sp.
Bird
13828
11
22
1987
2
NaN
NaN
NaN
34764
UP
Pipilo
sp.
Bird
14075
2
21
1988
23
NaN
NaN
NaN
34765
UP
Pipilo
sp.
Bird
14085
2
21
1988
23
NaN
NaN
NaN
34766
UP
Pipilo
sp.
Bird
14368
4
17
1988
22
NaN
NaN
NaN
34767
UP
Pipilo
sp.
Bird
15332
1
10
1989
1
NaN
NaN
NaN
34768
UP
Pipilo
sp.
Bird
15504
2
4
1989
1
NaN
NaN
NaN
34769
UP
Pipilo
sp.
Bird
17654
7
21
1990
1
NaN
NaN
NaN
34770
UR
Rodent
sp.
Rodent
13564
10
25
1987
8
NaN
NaN
NaN
34771
UR
Rodent
sp.
Rodent
13573
10
25
1987
11
NaN
NaN
NaN
34772
UR
Rodent
sp.
Rodent
13644
10
25
1987
2
NaN
NaN
NaN
34773
UR
Rodent
sp.
Rodent
13947
1
24
1988
11
NaN
NaN
NaN
34774
UR
Rodent
sp.
Rodent
18610
4
21
1991
10
NaN
NaN
NaN
34775
UR
Rodent
sp.
Rodent
19597
1
9
1992
11
NaN
NaN
NaN
34776
UR
Rodent
sp.
Rodent
21556
5
18
1994
18
NaN
NaN
NaN
34777
UR
Rodent
sp.
Rodent
32227
6
25
2001
7
NaN
NaN
NaN
34778
UR
Rodent
sp.
Rodent
32377
8
25
2001
1
NaN
NaN
NaN
34779
UR
Rodent
sp.
Rodent
34575
7
14
2002
6
NaN
NaN
NaN
34780
US
Sparrow
sp.
Bird
35512
12
31
2002
11
NaN
NaN
NaN
34781
US
Sparrow
sp.
Bird
35513
12
31
2002
11
NaN
NaN
NaN
34782
US
Sparrow
sp.
Bird
35528
12
31
2002
13
NaN
NaN
NaN
34783
US
Sparrow
sp.
Bird
35544
12
31
2002
15
NaN
NaN
NaN
34784
ZL
Zonotrichia
leucophrys
Bird
14250
3
20
1988
18
NaN
NaN
NaN
34785
ZL
Zonotrichia
leucophrys
Bird
14351
4
17
1988
23
NaN
NaN
NaN
34786 rows × 12 columns
In [33]:
merge_left = pd.merge(left=surveySub, right = species_df, how = 'right', left_on='species_id', right_on = 'species_id')
In [32]:
merge_left
Out[32]:
record_id
month
day
year
plot_id
species_id
sex
hindfoot_length
weight
genus
species
taxa
0
1
7
16
1977
2
NL
M
32.0
NaN
Neotoma
albigula
Rodent
1
2
7
16
1977
3
NL
M
33.0
NaN
Neotoma
albigula
Rodent
2
3
7
16
1977
2
DM
F
37.0
NaN
Dipodomys
merriami
Rodent
3
4
7
16
1977
7
DM
M
36.0
NaN
Dipodomys
merriami
Rodent
4
5
7
16
1977
3
DM
M
35.0
NaN
Dipodomys
merriami
Rodent
5
6
7
16
1977
1
PF
M
14.0
NaN
Perognathus
flavus
Rodent
6
7
7
16
1977
2
PE
F
NaN
NaN
Peromyscus
eremicus
Rodent
7
8
7
16
1977
1
DM
M
37.0
NaN
Dipodomys
merriami
Rodent
8
9
7
16
1977
1
DM
F
34.0
NaN
Dipodomys
merriami
Rodent
9
10
7
16
1977
6
PF
F
20.0
NaN
Perognathus
flavus
Rodent
In [44]:
merged_inner.groupby('species_id')['genus'].count().plot(kind='bar')
Out[44]:
<matplotlib.axes._subplots.AxesSubplot at 0x1175b3470>
%matplotlib inline
In [43]:
%matplotlib inline
In [ ]:
Content source: lucy6660/SWC_ANU_2016
Similar notebooks: