opendatasicilia / tansignari

"T'ansignari e t'appeddiri"
http://tansignari.opendatasicilia.it
Creative Commons Attribution 4.0 International
18 stars 10 forks source link

[CSV] rimuovere righe con "Totale" #213

Closed dennisangemi closed 2 years ago

dennisangemi commented 2 years ago

Sera! Mi sono imbattuto in un file CSV (popolazione residente di ISTAT) che contiene delle righe con il "Totale"; come faccio a rimuoverle? Thx

aborruso commented 2 years ago

Caro @dennisangemi , per queste cose uso Miller:

# salta le prime tre righe
<Enna.csv tail -n +3  | \
# estrai ciò che non contiene "Totale" in Età (-x restituisce tutto ciò che non soddisfa il filtro)
mlr  --csv filter -x '$Età=="Totale"'

Ho però la sensazione che ci hai provato. Su cosa hai sbattuto?

aborruso commented 2 years ago

@dennisangemi facendo una rapida analisi del file, penso ti possa bastare la riga di comando e filtrare tutto ciò che non contiene ,Tota

<Enna.csv grep -v ',Tota'

O cancellare ciò che lo contiene

<Enna.csv sed '/,Tota/d'
gabacode commented 2 years ago

Alternativa con pandas:

import pandas as pd
df = pd.read_csv('Enna.csv', header=2)
df2 = df.drop(df[df['Età'] == "Totale"].index)
df2.to_csv('Enna_clean.csv', index=False)

n.b. con header=2 si saltano le prime 2 righe del csv, non so se possono servirti!

pigreco commented 2 years ago

Alternativa con VisiData

# salta le prime tre righe e apri file con VisiData
<Enna.csv tail -n +3  | vd -f csv

all'interno di VisiData:

  1. posizionati nella colonna Eta usando i tasti freccia;
  2. digita da tastiera |
  3. scrivi semplicemente Tota e pigia invio (hai selezionato tutte le righe che contengono, in Eta, un testo Tota)
  4. digita g e poi d per eliminare le righe selezionate
  5. infine, digita ctrl +s per salvare
dennisangemi commented 2 years ago

per queste cose uso Miller: Ho però la sensazione che ci hai provato. Su cosa hai sbattuto?

carissimo @aborruso, non riuscivo (e non riesco) a selezionare la colonna "Età", per colpa della "à" (?). Miller mi restituisce questo errore

mlr: cannot parse DSL expression.
Parse error on token "à" at line 1 columnn 4.
Please check for missing semicolon.
Expected one of:
  $ ; { = > >> | ||= ^^= &&= ??= ???= |= &= ^= <<= >>= >>>= += .= -= *= /=
  //= %= **= ? || ^^ && ?? ??? =~ !=~ == != <=> >= < <= ^ & << >>> + - .+
  .- * / // % .* ./ .// . ** [ [[ [[[

Credo di avere un problema di encoding anche se chardet mi resitituisce utf-8 with confidence 0.9690625.

Per quanto riguarda la seconda soluzione che mi hai suggerito

<Enna.csv grep -v ',Tota'

è bellissima ma purtroppo elimina anche l'header (perchè contiene "Totale"). Dovrei salvarlo su un file temporaneo e poi fare il merging.

dennisangemi commented 2 years ago

Grazie mille anche a @pigreco e @gabacode ; info preziossisime che inserirò nella ricetta. Tuttavia utilizzerò versione bash, non solo per far contento @aborruso, ma anche perchè il "passaggio che mi manca" è parte di uno script bash abbastanza corposo che condividerò non appena finirò ;)

aborruso commented 2 years ago

è bellissima ma purtroppo elimina anche l'header (perchè contiene "Totale"). Dovrei salvarlo su un file temporaneo e poi fare il merging.

Iniziamo da qui: la prima riga contiene ,Tota? Ne sei certo? E soprattutto l'hai provato?

Io ho scaricato il file che hai indicato, l'ho estratto e non ho alcun problema.

Che versione di Miller hai (mlr --version)?

dennisangemi commented 2 years ago

Sorvolando alcune sviste (mie) in relazione al file che ho indicato, la carta vincente è stata lanciare

<Enna.csv grep -v ',Totale,'

Grazie @aborruso

dennisangemi commented 2 years ago

Ricetta scritta qui https://github.com/opendatasicilia/tansignari-md/commit/b21d33c2acd93ebb7cfc383818da6376f8ffdf9e

https://tansignari.opendatasicilia.it/ricette/csv-tsv/rimuovere_totale/

Scusate se è poco approfondita ma vado di fretta. Fell free to modify

dennisangemi commented 2 years ago

Grazie @gabacode @pigreco @aborruso <3