In [3]:
# loader le fichier csv
import pandas as pd 

df = pd.read_csv('../../data/les-arbres.csv', sep = ';', error_bad_lines = False)


df.shape
b'Skipping line 1916: expected 17 fields, saw 18\n'
Out[3]:
(200332, 17)
In [4]:
df.head()
Out[4]:
IDBASE TYPEEMPLACEMENT DOMANIALITE ARRONDISSEMENT COMPLEMENTADRESSE NUMERO LIEU / ADRESSE IDEMPLACEMENT LIBELLEFRANCAIS GENRE ESPECE VARIETEOUCULTIVAR CIRCONFERENCEENCM HAUTEUR (m) STADEDEVELOPPEMENT REMARQUABLE geo_point_2d
0 232702.0 Arbre Alignement PARIS 11E ARRDT NaN NaN BOULEVARD DE MENILMONTANT 000602002 Sophora Sophora japonica NaN 55.0 5.0 JA 0.0 48.8652353853, 2.38481800435
1 235862.0 Arbre Alignement PARIS 18E ARRDT NaN NaN AVENUE DE LA PORTE DE CLIGNANCOURT 000303007 Tilleul Tilia tomentosa NaN 60.0 10.0 JA NaN 48.8999949231, 2.34379810146
2 236391.0 Arbre Alignement PARIS 15E ARRDT 27 NaN BOULEVARD GARIBALDI 000101024 Noisetier de Byzance Corylus colurna NaN 60.0 10.0 JA NaN 48.8470727044, 2.30470921442
3 241122.0 Arbre Alignement PARIS 14E ARRDT NaN NaN RUE SARRETTE 000501003 Tilleul Tilia tomentosa NaN 155.0 12.0 A 0.0 48.8259993388, 2.32878574525
4 99927.0 Arbre Jardin PARIS 16E ARRDT NaN NaN JARDIN DU RANELAGH 00030007 Erable Acer platanoides 'Schwedleri' 125.0 0.0 NaN NaN 48.858836461, 2.26870442691
In [5]:
# les stats sur les variable numeriques

df.describe()
Out[5]:
IDBASE NUMERO CIRCONFERENCEENCM HAUTEUR (m) REMARQUABLE
count 2.003320e+05 0.0 200332.000000 200332.000000 137203.000000
mean 3.871040e+05 NaN 83.377988 13.108235 0.001341
std 5.454652e+05 NaN 672.864029 1970.258098 0.036596
min 9.987400e+04 NaN 0.000000 0.000000 0.000000
25% 1.558788e+05 NaN 30.000000 5.000000 0.000000
50% 2.210865e+05 NaN 70.000000 8.000000 0.000000
75% 2.741462e+05 NaN 115.000000 12.000000 0.000000
max 2.024745e+06 NaN 250255.000000 881818.000000 1.000000
In [8]:
# enlever la colonne NUMERO

df.drop(columns = ['NUMERO'], inplace=True)
Out[8]:
Index(['IDBASE', 'TYPEEMPLACEMENT', 'DOMANIALITE', 'ARRONDISSEMENT',
       'COMPLEMENTADRESSE', 'LIEU / ADRESSE', 'IDEMPLACEMENT',
       'LIBELLEFRANCAIS', 'GENRE', 'ESPECE', 'VARIETEOUCULTIVAR',
       'CIRCONFERENCEENCM', 'HAUTEUR (m)', 'STADEDEVELOPPEMENT', 'REMARQUABLE',
       'geo_point_2d'],
      dtype='object')
In [9]:
'NUMERO' in df.columns
Out[9]:
False
In [16]:
for col in df.columns:
    if df[col].dtype == 'O':
        print("--" * 20)
        print("  {}".format(col))
        print(df[col].value_counts( dropna= False )[:3] )
    
----------------------------------------
  TYPEEMPLACEMENT
Arbre    200332
Name: TYPEEMPLACEMENT, dtype: int64
----------------------------------------
  DOMANIALITE
Alignement    105061
Jardin         46329
CIMETIERE      31933
Name: DOMANIALITE, dtype: int64
----------------------------------------
  ARRONDISSEMENT
PARIS 15E ARRDT    17156
PARIS 13E ARRDT    16714
PARIS 16E ARRDT    16405
Name: ARRONDISSEMENT, dtype: int64
----------------------------------------
  COMPLEMENTADRESSE
NaN    169318
SN°       557
1         552
Name: COMPLEMENTADRESSE, dtype: int64
----------------------------------------
  LIEU / ADRESSE
PARC FLORAL DE PARIS / ROUTE DE LA PYRAMIDE    2995
PARC DES BUTTES CHAUMONT                       2331
PARC ANDRE CITROEN                             2095
Name: LIEU / ADRESSE, dtype: int64
----------------------------------------
  IDEMPLACEMENT
000101001    1290
000101002    1210
000101003    1098
Name: IDEMPLACEMENT, dtype: int64
----------------------------------------
  LIBELLEFRANCAIS
Platane       42565
Marronnier    25231
Tilleul       21335
Name: LIBELLEFRANCAIS, dtype: int64
----------------------------------------
  GENRE
Platanus    42648
Aesculus    25366
Tilia       21580
Name: GENRE, dtype: int64
----------------------------------------
  ESPECE
x hispanica      36464
hippocastanum    20063
japonica         11823
Name: ESPECE, dtype: int64
----------------------------------------
  VARIETEOUCULTIVAR
NaN            163529
'Baumannii'      4558
'Briotii'        2827
Name: VARIETEOUCULTIVAR, dtype: int64
----------------------------------------
  STADEDEVELOPPEMENT
NaN    67247
A      64526
JA     35486
Name: STADEDEVELOPPEMENT, dtype: int64
----------------------------------------
  geo_point_2d
48.8383178014, 2.40660990318    2
48.8385499225, 2.43926756645    2
48.9002534452, 2.38644429503    2
Name: geo_point_2d, dtype: int64
In [19]:
import matplotlib.pyplot as plt
%matplotlib inline
In [23]:
fig, ax = plt.subplots(1,1)
df['HAUTEUR (m)'].hist(bins = 100)
plt.show()
In [27]:
fig, ax = plt.subplots(1,1)
df['CIRCONFERENCEENCM'].hist(bins = 100)
plt.show()
In [30]:
plt.boxplot(df['CIRCONFERENCEENCM'])
Out[30]:
{'boxes': [<matplotlib.lines.Line2D at 0x11246e240>],
 'caps': [<matplotlib.lines.Line2D at 0x1124d5cc0>,
  <matplotlib.lines.Line2D at 0x115c1f400>],
 'fliers': [<matplotlib.lines.Line2D at 0x115c7a240>],
 'means': [],
 'medians': [<matplotlib.lines.Line2D at 0x115c46b00>],
 'whiskers': [<matplotlib.lines.Line2D at 0x112478e80>,
  <matplotlib.lines.Line2D at 0x1124ac940>]}
In [33]:
import numpy as np


df['diametre'] = df['CIRCONFERENCEENCM'].apply( lambda c : c /np.pi    )

df['diametre'] = df['CIRCONFERENCEENCM'] / np.pi
In [37]:
df.diametre.describe()

np.percentile(df.diametre, 99.9)
Out[37]:
136.4518087697526
In [40]:
condition = (df['HAUTEUR (m)'] > 0 ) & (df['HAUTEUR (m)'] < 100 ) & (df['diametre'] < 150 )

df[condition].shape

df = df[condition]
In [41]:
df['HAUTEUR (m)'].hist(bins = 100)
Out[41]:
<matplotlib.axes._subplots.AxesSubplot at 0x117753780>
In [42]:
df['diametre'].hist(bins = 100)
Out[42]:
<matplotlib.axes._subplots.AxesSubplot at 0x10d390278>
In [43]:
df.ARRONDISSEMENT
Out[43]:
0           PARIS 11E ARRDT
1           PARIS 18E ARRDT
2           PARIS 15E ARRDT
3           PARIS 14E ARRDT
5            PARIS 7E ARRDT
8            PARIS 4E ARRDT
11          PARIS 18E ARRDT
14        SEINE-SAINT-DENIS
16        SEINE-SAINT-DENIS
17          PARIS 15E ARRDT
18          PARIS 12E ARRDT
19          PARIS 12E ARRDT
20          PARIS 16E ARRDT
21          PARIS 17E ARRDT
22          PARIS 15E ARRDT
23          PARIS 16E ARRDT
24          PARIS 16E ARRDT
25          PARIS 16E ARRDT
26          PARIS 15E ARRDT
27          PARIS 11E ARRDT
28           PARIS 8E ARRDT
29          PARIS 18E ARRDT
30          PARIS 20E ARRDT
31          PARIS 12E ARRDT
32          PARIS 13E ARRDT
34          PARIS 15E ARRDT
35        BOIS DE VINCENNES
36        BOIS DE VINCENNES
37          PARIS 19E ARRDT
38        BOIS DE VINCENNES
                ...        
200300      PARIS 15E ARRDT
200301      PARIS 15E ARRDT
200302      PARIS 16E ARRDT
200303      PARIS 15E ARRDT
200304      PARIS 16E ARRDT
200305      PARIS 10E ARRDT
200306      PARIS 11E ARRDT
200307      PARIS 12E ARRDT
200308      PARIS 12E ARRDT
200309      PARIS 12E ARRDT
200310       PARIS 5E ARRDT
200311       PARIS 8E ARRDT
200312       PARIS 8E ARRDT
200313     BOIS DE BOULOGNE
200314      PARIS 15E ARRDT
200315      PARIS 15E ARRDT
200316      PARIS 16E ARRDT
200317       PARIS 7E ARRDT
200318       PARIS 8E ARRDT
200319       PARIS 8E ARRDT
200320      PARIS 10E ARRDT
200321    BOIS DE VINCENNES
200322    BOIS DE VINCENNES
200323       HAUTS-DE-SEINE
200324      PARIS 19E ARRDT
200326      PARIS 13E ARRDT
200327      PARIS 12E ARRDT
200328     BOIS DE BOULOGNE
200329      PARIS 14E ARRDT
200330      PARIS 12E ARRDT
Name: ARRONDISSEMENT, Length: 160779, dtype: object
In [44]:
# les arbres dans paris
# ARRONDISSEMENT contient "PARIS"

condition = df.ARRONDISSEMENT.str.contains('PARIS')

df[condition].ARRONDISSEMENT.value_counts()
Out[44]:
PARIS 16E ARRDT    15012
PARIS 13E ARRDT    13824
PARIS 20E ARRDT    12934
PARIS 12E ARRDT    12159
PARIS 15E ARRDT    11442
PARIS 14E ARRDT    11358
PARIS 19E ARRDT    10298
PARIS 17E ARRDT     8678
PARIS 7E ARRDT      8507
PARIS 18E ARRDT     8454
PARIS 8E ARRDT      7062
PARIS 11E ARRDT     5529
PARIS 10E ARRDT     3106
PARIS 4E ARRDT      2690
PARIS 5E ARRDT      2341
PARIS 6E ARRDT      1754
PARIS 1ER ARRDT     1335
PARIS 3E ARRDT      1200
PARIS 9E ARRDT      1098
PARIS 2E ARRDT       537
Name: ARRONDISSEMENT, dtype: int64
In [45]:
df = df[condition]
df.shape
Out[45]:
(139318, 17)
In [61]:
gb = df.groupby( by = ['ARRONDISSEMENT', 'LIBELLEFRANCAIS']  ).mean()
gb.reset_index(inplace = True)
gb
Out[61]:
ARRONDISSEMENT LIBELLEFRANCAIS IDBASE CIRCONFERENCEENCM HAUTEUR (m) REMARQUABLE diametre
0 PARIS 10E ARRDT Ailante 3.216584e+05 103.741935 9.967742 0.000000 33.022084
1 PARIS 10E ARRDT Alisier 2.930440e+05 20.000000 5.000000 0.000000 6.366198
2 PARIS 10E ARRDT Amandier 1.842330e+05 25.000000 3.000000 0.000000 7.957747
3 PARIS 10E ARRDT Arbre aux quarante écus 2.750314e+05 69.461538 9.307692 0.000000 22.110294
4 PARIS 10E ARRDT Arbre de Judée 4.904134e+05 93.444444 7.000000 0.000000 29.744290
5 PARIS 10E ARRDT Arbre à soie 1.871217e+05 18.666667 3.333333 0.000000 5.941785
6 PARIS 10E ARRDT Bouleau 1.977930e+05 63.588235 11.509804 0.000000 20.240764
7 PARIS 10E ARRDT Catalpa 2.301977e+05 80.000000 10.000000 0.000000 25.464791
8 PARIS 10E ARRDT Cerisier à fleurs 7.036113e+05 53.000000 5.246154 0.000000 16.870424
9 PARIS 10E ARRDT Cerisier à fruits 1.842370e+05 25.000000 4.000000 0.000000 7.957747
10 PARIS 10E ARRDT Cerisier à grappes 2.029080e+05 20.000000 5.000000 0.000000 6.366198
11 PARIS 10E ARRDT Charme 3.382866e+05 39.768362 7.220339 0.000000 12.658663
12 PARIS 10E ARRDT Charme-Houblon 2.744478e+05 52.826087 8.869565 0.000000 16.815066
13 PARIS 10E ARRDT Chêne 4.524939e+05 42.562500 7.187500 0.062500 13.548065
14 PARIS 10E ARRDT Cognassier 2.017356e+06 10.000000 2.000000 0.000000 3.183099
15 PARIS 10E ARRDT Copalme 2.861000e+05 43.666667 7.666667 0.000000 13.899532
16 PARIS 10E ARRDT Cornouiller 1.294451e+06 20.000000 5.000000 0.000000 6.366198
17 PARIS 10E ARRDT Cyprès 1.842030e+05 105.000000 15.000000 0.000000 33.422538
18 PARIS 10E ARRDT Cèdre 1.997125e+05 137.500000 15.000000 NaN 43.767609
19 PARIS 10E ARRDT Erable 3.323489e+05 88.072165 11.036082 0.000000 28.034241
20 PARIS 10E ARRDT Fevier 2.487587e+05 43.900000 7.200000 0.000000 13.973804
21 PARIS 10E ARRDT Frêne 2.853585e+05 74.040000 9.946667 0.000000 23.567664
22 PARIS 10E ARRDT Frêne à fleurs 2.145790e+05 31.666667 5.333333 0.000000 10.079813
23 PARIS 10E ARRDT Laurier du Portugal 2.018288e+06 20.000000 5.000000 0.000000 6.366198
24 PARIS 10E ARRDT Lilas des indes 2.154770e+05 25.000000 3.000000 0.000000 7.957747
25 PARIS 10E ARRDT Magnolia 3.282096e+05 75.627451 7.352941 0.000000 24.072965
26 PARIS 10E ARRDT Marronnier 2.442603e+05 135.910714 12.598214 0.000000 43.261724
27 PARIS 10E ARRDT Merisier 1.915550e+05 52.000000 8.000000 0.000000 16.552114
28 PARIS 10E ARRDT Micocoulier 2.855874e+05 120.375000 13.500000 0.000000 38.316553
29 PARIS 10E ARRDT Mûrier 2.986600e+05 91.605505 10.678899 0.000000 29.158938
... ... ... ... ... ... ... ...
1672 PARIS 9E ARRDT Charme 2.643521e+05 51.636364 8.727273 0.000000 16.436365
1673 PARIS 9E ARRDT Chêne 2.378429e+05 46.404762 6.595238 0.000000 14.771094
1674 PARIS 9E ARRDT Erable 8.110159e+05 51.035714 7.857143 0.000000 16.245172
1675 PARIS 9E ARRDT Fevier 2.832462e+05 80.807692 11.884615 0.000000 25.721887
1676 PARIS 9E ARRDT Lilas des indes 2.551370e+05 20.000000 3.000000 0.000000 6.366198
1677 PARIS 9E ARRDT Magnolia 2.017711e+06 10.000000 2.000000 0.000000 3.183099
1678 PARIS 9E ARRDT Marronnier 3.166961e+05 104.023810 11.547619 0.000000 33.111807
1679 PARIS 9E ARRDT Micocoulier 3.930880e+05 58.852113 6.866197 0.000000 18.733209
1680 PARIS 9E ARRDT Mûrier 2.861630e+05 57.000000 5.750000 0.000000 18.143664
1681 PARIS 9E ARRDT Noyer 2.152310e+05 216.000000 15.000000 0.000000 68.754935
1682 PARIS 9E ARRDT Néflier 1.866290e+05 64.000000 8.000000 0.000000 20.371833
1683 PARIS 9E ARRDT Orme de Sibérie 3.193080e+05 50.000000 5.333333 0.000000 15.915494
1684 PARIS 9E ARRDT Paulownia 2.520590e+05 162.500000 10.000000 0.000000 51.725357
1685 PARIS 9E ARRDT Peuplier 3.192760e+05 207.000000 20.000000 0.000000 65.890146
1686 PARIS 9E ARRDT Photinia 2.170440e+05 33.333333 3.000000 0.000000 10.610330
1687 PARIS 9E ARRDT Platane 2.657069e+05 104.069565 13.973913 0.002174 33.126371
1688 PARIS 9E ARRDT Poirier 1.864840e+05 27.000000 6.000000 0.000000 8.594367
1689 PARIS 9E ARRDT Poirier à fleurs 2.442628e+05 52.764706 9.411765 0.000000 16.795528
1690 PARIS 9E ARRDT Poirier à fruits 2.020886e+06 24.285714 2.000000 0.000000 7.730383
1691 PARIS 9E ARRDT Pommier 1.854420e+05 18.000000 3.000000 0.000000 5.729578
1692 PARIS 9E ARRDT Pommier à fleurs 4.115462e+05 58.000000 8.416667 0.000000 18.461973
1693 PARIS 9E ARRDT Pommier à fruits 2.020848e+06 10.000000 2.000000 0.000000 3.183099
1694 PARIS 9E ARRDT Prunier à fleurs 1.262483e+06 36.571429 4.857143 0.000000 11.641047
1695 PARIS 9E ARRDT Pterocarya 2.971995e+05 91.977778 9.222222 0.022222 29.277436
1696 PARIS 9E ARRDT Robinier 3.075820e+05 89.166667 10.166667 0.000000 28.382632
1697 PARIS 9E ARRDT Savonnier 3.169560e+05 80.000000 10.000000 0.000000 25.464791
1698 PARIS 9E ARRDT Sophora 2.941020e+05 84.126761 10.140845 0.000000 26.778380
1699 PARIS 9E ARRDT Tilleul 2.760113e+05 77.750000 9.000000 0.000000 24.748594
1700 PARIS 9E ARRDT Troene 3.193050e+05 30.000000 5.000000 0.000000 9.549297
1701 PARIS 9E ARRDT Tulipier 2.157222e+05 45.000000 9.500000 0.000000 14.323945

1702 rows × 7 columns

In [76]:
gb = df.groupby( by = 'ARRONDISSEMENT'  ).count()
gb.reset_index(inplace = True)
gb
Out[76]:
ARRONDISSEMENT IDBASE TYPEEMPLACEMENT DOMANIALITE COMPLEMENTADRESSE LIEU / ADRESSE IDEMPLACEMENT LIBELLEFRANCAIS GENRE ESPECE VARIETEOUCULTIVAR CIRCONFERENCEENCM HAUTEUR (m) STADEDEVELOPPEMENT REMARQUABLE geo_point_2d diametre
0 PARIS 10E ARRDT 3106 3106 3106 1252 3106 3106 3079 3106 2786 1050 3106 3106 2770 2834 3106 3106
1 PARIS 11E ARRDT 5529 5529 5529 431 5529 5529 5514 5529 5504 601 5529 5529 4474 4625 5529 5529
2 PARIS 12E ARRDT 12159 12159 12159 1404 12159 12159 12033 12159 12023 2121 12159 12159 8741 8387 12159 12159
3 PARIS 13E ARRDT 13824 13824 13824 1302 13824 13824 13735 13824 13756 3005 13824 13824 10219 10328 13824 13824
4 PARIS 14E ARRDT 11358 11358 11358 702 11358 11358 11194 11358 11217 2203 11358 11358 10164 9964 11358 11358
5 PARIS 15E ARRDT 11442 11442 11442 7746 11442 11442 11281 11442 11398 3047 11442 11442 9710 9142 11442 11442
6 PARIS 16E ARRDT 15012 15012 15012 1595 15012 15012 14915 15012 14949 1652 15012 15012 11475 10545 15012 15012
7 PARIS 17E ARRDT 8678 8678 8678 941 8678 8678 8629 8678 8643 1479 8678 8678 7374 6926 8678 8678
8 PARIS 18E ARRDT 8454 8454 8454 1055 8454 8454 8372 8454 8388 2286 8454 8454 6914 6581 8454 8454
9 PARIS 19E ARRDT 10298 10298 10298 770 10298 10298 10201 10298 10230 1793 10298 10298 7391 8099 10298 10298
10 PARIS 1ER ARRDT 1335 1335 1335 200 1335 1335 1305 1335 1318 338 1335 1335 995 1153 1335 1335
11 PARIS 20E ARRDT 12934 12934 12933 4483 12934 12934 12854 12934 12840 2058 12934 12934 10597 10518 12934 12934
12 PARIS 2E ARRDT 537 537 537 400 537 537 534 537 534 64 537 537 468 520 537 537
13 PARIS 3E ARRDT 1200 1200 1200 654 1200 1200 1192 1200 1200 132 1200 1200 950 960 1200 1200
14 PARIS 4E ARRDT 2690 2690 2690 196 2690 2690 2682 2690 2665 510 2690 2690 2007 2200 2690 2690
15 PARIS 5E ARRDT 2341 2341 2341 913 2341 2341 2302 2341 2331 277 2341 2341 1756 1750 2341 2341
16 PARIS 6E ARRDT 1754 1754 1754 625 1754 1754 1741 1754 1742 289 1754 1754 1416 1258 1754 1754
17 PARIS 7E ARRDT 8507 8507 8507 3190 8507 8507 8444 8507 8489 936 8507 8507 7851 7696 8507 8507
18 PARIS 8E ARRDT 7062 7062 7062 836 7062 7062 7046 7062 7055 846 7062 7062 6290 5101 7062 7062
19 PARIS 9E ARRDT 1098 1098 1098 701 1098 1098 1092 1098 1098 139 1098 1098 998 1097 1098 1098
In [77]:
gb.rename(columns={'DOMANIALITE': 'nbre_abres'}, inplace = True)

gb = gb[['ARRONDISSEMENT', 'nbre_abres']]
In [78]:
gb
Out[78]:
ARRONDISSEMENT nbre_abres
0 PARIS 10E ARRDT 3106
1 PARIS 11E ARRDT 5529
2 PARIS 12E ARRDT 12159
3 PARIS 13E ARRDT 13824
4 PARIS 14E ARRDT 11358
5 PARIS 15E ARRDT 11442
6 PARIS 16E ARRDT 15012
7 PARIS 17E ARRDT 8678
8 PARIS 18E ARRDT 8454
9 PARIS 19E ARRDT 10298
10 PARIS 1ER ARRDT 1335
11 PARIS 20E ARRDT 12933
12 PARIS 2E ARRDT 537
13 PARIS 3E ARRDT 1200
14 PARIS 4E ARRDT 2690
15 PARIS 5E ARRDT 2341
16 PARIS 6E ARRDT 1754
17 PARIS 7E ARRDT 8507
18 PARIS 8E ARRDT 7062
19 PARIS 9E ARRDT 1098
In [69]:
df['ARRONDISSEMENT'].value_counts()
Out[69]:
PARIS 16E ARRDT    15012
PARIS 13E ARRDT    13824
PARIS 20E ARRDT    12934
PARIS 12E ARRDT    12159
PARIS 15E ARRDT    11442
PARIS 14E ARRDT    11358
PARIS 19E ARRDT    10298
PARIS 17E ARRDT     8678
PARIS 7E ARRDT      8507
PARIS 18E ARRDT     8454
PARIS 8E ARRDT      7062
PARIS 11E ARRDT     5529
PARIS 10E ARRDT     3106
PARIS 4E ARRDT      2690
PARIS 5E ARRDT      2341
PARIS 6E ARRDT      1754
PARIS 1ER ARRDT     1335
PARIS 3E ARRDT      1200
PARIS 9E ARRDT      1098
PARIS 2E ARRDT       537
Name: ARRONDISSEMENT, dtype: int64
In [79]:
def format_arrdt(texte):
    '''
    PARIS 3E ARRDT => 75103
    '''
    texte = '751' + texte.split(' ')[1].replace('E','').replace('R','').zfill(2) 
    return int(texte)
    

gb['code_postal']  = gb['ARRONDISSEMENT'].apply(lambda ardt : format_arrdt(ardt) )
gb    
/Users/alexis/anaconda3/lib/python3.6/site-packages/ipykernel/__main__.py:11: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
Out[79]:
ARRONDISSEMENT nbre_abres code_postal
0 PARIS 10E ARRDT 3106 75110
1 PARIS 11E ARRDT 5529 75111
2 PARIS 12E ARRDT 12159 75112
3 PARIS 13E ARRDT 13824 75113
4 PARIS 14E ARRDT 11358 75114
5 PARIS 15E ARRDT 11442 75115
6 PARIS 16E ARRDT 15012 75116
7 PARIS 17E ARRDT 8678 75117
8 PARIS 18E ARRDT 8454 75118
9 PARIS 19E ARRDT 10298 75119
10 PARIS 1ER ARRDT 1335 75101
11 PARIS 20E ARRDT 12933 75120
12 PARIS 2E ARRDT 537 75102
13 PARIS 3E ARRDT 1200 75103
14 PARIS 4E ARRDT 2690 75104
15 PARIS 5E ARRDT 2341 75105
16 PARIS 6E ARRDT 1754 75106
17 PARIS 7E ARRDT 8507 75107
18 PARIS 8E ARRDT 7062 75108
19 PARIS 9E ARRDT 1098 75109
In [84]:
arrdt = pd.read_csv('../../data/arrondissements.csv', sep = ';')
arrdt.head()
Out[84]:
C_ARINSEE L_AR SURFACE PERIMETRE OBJECTID LONGUEUR
0 75102 2ème Ardt 9.911537e+05 4554.104360 2 4553.938764
1 75103 3ème Ardt 1.170883e+06 4519.263648 3 4519.071982
2 75112 12ème Ardt 1.631478e+07 24089.666298 12 24088.038922
3 75101 1er Ardt 1.824613e+06 6054.936862 1 6054.680862
4 75104 4ème Ardt 1.600586e+06 5420.908434 4 5420.636779
In [85]:
arrdt.rename(columns = {'C_ARINSEE': 'code_postal'}, inplace = True)
arrdt.head()
Out[85]:
code_postal L_AR SURFACE PERIMETRE OBJECTID LONGUEUR
0 75102 2ème Ardt 9.911537e+05 4554.104360 2 4553.938764
1 75103 3ème Ardt 1.170883e+06 4519.263648 3 4519.071982
2 75112 12ème Ardt 1.631478e+07 24089.666298 12 24088.038922
3 75101 1er Ardt 1.824613e+06 6054.936862 1 6054.680862
4 75104 4ème Ardt 1.600586e+06 5420.908434 4 5420.636779
In [ ]:
# join

gb = gb.merge(arrdt, on = 'code_postal')

gb
In [93]:
gb['ratio'] = gb['nbre_abres'] /  gb['SURFACE']

gb.sort_values(by = 'ratio' , ascending = False, inplace= True)

gb[['ARRONDISSEMENT', 'nbre_abres', 'SURFACE', 'ratio']]
Out[93]:
ARRONDISSEMENT nbre_abres SURFACE ratio
11 PARIS 20E ARRDT 12933 5.983446e+06 0.002161
17 PARIS 7E ARRDT 8507 4.090057e+06 0.002080
4 PARIS 14E ARRDT 11358 5.614877e+06 0.002023
3 PARIS 13E ARRDT 13824 7.149311e+06 0.001934
18 PARIS 8E ARRDT 7062 3.880036e+06 0.001820
14 PARIS 4E ARRDT 2690 1.600586e+06 0.001681
7 PARIS 17E ARRDT 8678 5.668835e+06 0.001531
9 PARIS 19E ARRDT 10298 6.792651e+06 0.001516
1 PARIS 11E ARRDT 5529 3.665442e+06 0.001508
8 PARIS 18E ARRDT 8454 5.996051e+06 0.001410
5 PARIS 15E ARRDT 11442 8.494994e+06 0.001347
0 PARIS 10E ARRDT 3106 2.891739e+06 0.001074
13 PARIS 3E ARRDT 1200 1.170883e+06 0.001025
15 PARIS 5E ARRDT 2341 2.539375e+06 0.000922
6 PARIS 16E ARRDT 15012 1.637254e+07 0.000917
16 PARIS 6E ARRDT 1754 2.153096e+06 0.000815
2 PARIS 12E ARRDT 12159 1.631478e+07 0.000745
10 PARIS 1ER ARRDT 1335 1.824613e+06 0.000732
12 PARIS 2E ARRDT 537 9.911537e+05 0.000542
19 PARIS 9E ARRDT 1098 2.178303e+06 0.000504
In [ ]: