Created
November 9, 2016 15:51
-
-
Save alessandrocucci/470f999a603f2962b4b8245cd36be04d to your computer and use it in GitHub Desktop.
Giocando con Pandas
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from pandas.io.parsers import read_csv | |
""" | |
Esempio base di utilizzo della libreria Pandas per maneggiare file csv Senza | |
diventare scemi. | |
Tutta la documentazione è presente a questo indirizzo: | |
http://pandas.pydata.org/pandas-docs/stable/index.html | |
""" | |
# Importo un csv separato da virgole, creando di fatto un DataFrame | |
df = read_csv("SacramentocrimeJanuary2006.csv") | |
# Vediamo un po' come e' fatto il nostro DataFrame | |
print df.shape # (7584, 9) // 7584 sono le righe, 9 sono le colonne | |
# Quali sono le colonne? | |
print df.columns | |
# Index([u'cdatetime', u'address', u'district', u'beat', u'grid', u'crimedescr', | |
# u'ucr_ncic_code', u'latitude', u'longitude'], | |
# dtype='object') | |
# Diamo un'occhio all'inizio del file: | |
print df.head() | |
# cdatetime address district beat grid \ | |
# 0 1/1/06 0:00 3108 OCCIDENTAL DR 3 3C 1115 | |
# 1 1/1/06 0:00 2082 EXPEDITION WAY 5 5A 1512 | |
# 2 1/1/06 0:00 4 PALEN CT 2 2A 212 | |
# 3 1/1/06 0:00 22 BECKFORD CT 6 6C 1443 | |
# 4 1/1/06 0:00 3421 AUBURN BLVD 2 2A 508 | |
# | |
# crimedescr ucr_ncic_code latitude longitude | |
# 0 10851(A)VC TAKE VEH W/O OWNER 2404 38.550420 -121.391416 | |
# 1 459 PC BURGLARY RESIDENCE 2204 38.473501 -121.490186 | |
# 2 10851(A)VC TAKE VEH W/O OWNER 2404 38.657846 -121.462101 | |
# 3 476 PC PASS FICTICIOUS CHECK 2501 38.506774 -121.426951 | |
# 4 459 PC BURGLARY-UNSPECIFIED 2299 38.637448 -121.384613 | |
# Se vogliamo solo la prima riga: | |
print df.head(1) | |
# cdatetime address district beat grid \ | |
# 0 1/1/06 0:00 3108 OCCIDENTAL DR 3 3C 1115 | |
# | |
# crimedescr ucr_ncic_code latitude longitude | |
# 0 10851(A)VC TAKE VEH W/O OWNER 2404 38.55042 -121.391416 | |
# Se vogliamo l'ultima | |
print df.tail(1) | |
# cdatetime address district beat \ | |
# 7583 1/31/06 23:50 COBBLE COVE LN / COBBLE SHORES DR 4 4C | |
# | |
# grid crimedescr ucr_ncic_code latitude longitude | |
# 7583 1294 TRAFFIC-ACCIDENT-NON INJURY 5400 38.479628 -121.528634 | |
# Se voglio le righe dalla 100 alla 105 | |
print df[100:105] | |
# cdatetime address district beat grid \ | |
# 100 1/1/06 7:00 2518 HAWTHORNE ST 2 2B 551 | |
# 101 1/1/06 7:20 AZEVEDO DR / YARWOOD WAY 1 1B 411 | |
# 102 1/1/06 7:30 6021 WILKINSON ST 6 6C 1404 | |
# 103 1/1/06 7:45 1200 ROANOKE AVE 2 2A 514 | |
# 104 1/1/06 7:46 RIO LINDA BLVD / MAIN AVE 2 2A 224 | |
# | |
# crimedescr ucr_ncic_code latitude longitude | |
# 100 459 PC BURGLARY RESIDENCE 2204 38.611980 -121.457806 | |
# 101 PERSON INFORMATION - I RPT 7000 38.620998 -121.510447 | |
# 102 653M(B) PC ANNOY/RPT CALL HOME 5307 38.517560 -121.414271 | |
# 103 459 PC BURGLARY VEHICLE 2299 38.634658 -121.439240 | |
# 104 20002(A) HIT/RUN 5401 38.655093 -121.447739 | |
# Pialliamo la prima riga | |
df.loc[0] = ["" for col in df.columns] | |
print df.head(1) | |
# cdatetime address district beat grid crimedescr ucr_ncic_code latitude \ | |
# 0 | |
# | |
# longitude | |
# 0 | |
# Scriviamo una riga in fondo al file | |
df.loc[len(df) + 1] = ["Sto scrivendo" for col in df.columns] | |
print df.tail(1) | |
# cdatetime address district beat \ | |
# 7585 Sto scrivendo Sto scrivendo Sto scrivendo Sto scrivendo | |
# | |
# grid crimedescr ucr_ncic_code latitude \ | |
# 7585 Sto scrivendo Sto scrivendo Sto scrivendo Sto scrivendo | |
# | |
# longitude | |
# 7585 Sto scrivendo | |
# Ora la parte divertente, voglio sapere la tipologia di crimine compiuta più spesso (colonna "crimedescr") | |
# diciamo i primi 5 | |
sorted([(name, len(group)) for name, group in df.groupby("crimedescr")], reverse=True, key= lambda x: x[1])[:5] | |
# [ | |
# ('10851(A)VC TAKE VEH W/O OWNER', 652), | |
# ('TOWED/STORED VEH-14602.6', 463), | |
# ('459 PC BURGLARY VEHICLE', 462), | |
# ('TOWED/STORED VEHICLE', 434), | |
# ('459 PC BURGLARY RESIDENCE', 356) | |
# ] | |
# Salviamo il file csv modificato | |
df.to_csv("salvato.csv", sep=',') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment