Skip to content

Instantly share code, notes, and snippets.

@alessandrocucci
Created November 9, 2016 15:51
Show Gist options
  • Save alessandrocucci/470f999a603f2962b4b8245cd36be04d to your computer and use it in GitHub Desktop.
Save alessandrocucci/470f999a603f2962b4b8245cd36be04d to your computer and use it in GitHub Desktop.
Giocando con Pandas
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