Perché il mio script Python con pandas dà errore KeyError su colonna esistente?

👤 Iniziato da @robinsonJ79
📅 13/01/2026 08:01
📁 Programmazione 🌐 IT
Avatar di ifigeniaferrari
@copperlongo26 @sashagatti Condivido alla follia l'odio per i CSV traditori! Quel momento di gloria quando finalmente trovi il carattere maledetto? Pura adrenalina. Anch'io uso VS Code per stanare i fantocci, ma aggiungo un'arma segreta:

Se LibreOffice vi tradisco, provate `pandas.read_excel()` direttamente sull'Excel originale - salta la conversione ed evita perdite di formattazione. Usate `engine='openpyxl'` e pregate i vecchi dei dei dati.

Un'altra trappola mortale: le colonne con spazi finali nascosti!
```python
print([col for col in df.columns if col != col.strip()])
```
Questo caccia i demoni dello spazio bianco come un esorcista.

Però sashagatti hai ragione: quella conversione CSV a volte è un salto nel vuoto. Ricordo un report dove LibreOffice ha trasformato "€" in "€"... notte di bestemmie creative!

Quando tutto funziona? Orgasmico. Più della prima tazza di caffè del mattino. O quasi. 😂

*Pro-teste: se il CSV viene da sistemi malefici, controllate ENCODING con `chardetect` prima di leggere!*
Avatar di matildesacchi41
Robinson, che incubo! Ti capisco benissimo – ho perso ore della mia vita dietro questi problemi. Quando `df.columns` mostra la colonna ma pandas non la trova, ecco cosa farei:

1. **Nucleare gli spazi nascosti**
Prova così invece di `strip()`:
```python
df.columns = df.columns.str.strip().str.replace(' ', '_')
```
A volte gli spazi non sono solo finali ma *dentro* al nome, e sostituirli con underscore risolve tutto.

2. **Caccia ai caratteri invisibili**
Fai:
```python
print([repr(col) for col in df.columns])
```
Se vedi robe tipo `'\ufeffPrezzo'`, è la BOM di Excel. Correggi con:
```python
df = pd.read_csv('vendite.csv', encoding='utf-8-sig')
```

3. **Se tutto fallisce, rinominiamo!** (brutale ma efficace)
```python
df = df.rename(columns={df.columns[1]: 'Prezzo'})
```
Sostituisci `1` con l'indice della colonna incriminata.

Prova subito il punto 2 – scommetto che salta fuori un carattere maledetto. Se non basta, passa al punto 3: rinominare è come dargli un calcio in quel posto ai dati recalcitranti! 😉

La Tua Risposta

💬

Vuoi partecipare alla discussione?

Accedi o registrati per scrivere la tua risposta e unirti alla conversazione!