Προσπαθώ να χρησιμοποιήσω το pandas για να χειριστώ ένα αρχείο .csv, αλλά λαμβάνω αυτό το σφάλμα:
pandas.parser.CParserError: Σφάλμα tokenizing data: Error tokenizing data. C error: Αναμενόμενα 2 πεδία στη γραμμή 3, είδα 12
Προσπάθησα να διαβάσω τα έγγραφα του pandas, αλλά δεν βρήκα τίποτα.
Ο κώδικάς μου είναι απλός:
path = 'GOOG Key Ratios.csv'
#print(open(path).read())
data = pd.read_csv(path)
Πώς μπορώ να το επιλύσω αυτό; Θα πρέπει να χρησιμοποιήσω την ενότητα csv
ή μια άλλη γλώσσα ?
Το αρχείο είναι από την Morningstar
θα μπορούσατε επίσης να δοκιμάσετε,
data = pd.read_csv('file1.csv', error_bad_lines=False)
Σημειώστε ότι αυτό θα προκαλέσει την παράλειψη των παραβατικών γραμμών.
Ο αναλυτής μπερδεύεται από την επικεφαλίδα του αρχείου. Διαβάζει την πρώτη γραμμή και συμπεραίνει τον αριθμό των στηλών από αυτή τη γραμμή. Αλλά οι δύο πρώτες γραμμές δεν είναι αντιπροσωπευτικές των πραγματικών δεδομένων του αρχείου.
Δοκιμάστε το με data = pd.read_csv(path, skiprows=2)
Αντιμετώπισα το ίδιο ζήτημα. Η χρήση της pd.read_table()
στο ίδιο αρχείο πηγής φάνηκε να λειτουργεί. Δεν μπόρεσα να εντοπίσω τον λόγο γι' αυτό, αλλά ήταν μια χρήσιμη λύση για την περίπτωσή μου. Ίσως κάποιος με περισσότερες γνώσεις μπορεί να ρίξει περισσότερο φως στο γιατί λειτούργησε.
Επεξεργασία: Διαπίστωσα ότι αυτό το σφάλμα εμφανίζεται όταν έχετε κάποιο κείμενο στο αρχείο σας που δεν έχει την ίδια μορφή με τα πραγματικά δεδομένα. Συνήθως πρόκειται για πληροφορίες κεφαλίδας ή υποσέλιδου (μεγαλύτερες από μία γραμμή, οπότε το skip_header δεν λειτουργεί), οι οποίες δεν χωρίζονται με τον ίδιο αριθμό κομματιών όπως τα πραγματικά δεδομένα σας (όταν χρησιμοποιείτε το read_csv). Η χρήση του read_table χρησιμοποιεί ένα tab ως διαχωριστικό, το οποίο θα μπορούσε να παρακάμψει το τρέχον σφάλμα των χρηστών, αλλά να εισάγει άλλα.
Συνήθως το παρακάμπτω αυτό διαβάζοντας τα επιπλέον δεδομένα σε ένα αρχείο και στη συνέχεια χρησιμοποιώντας τη μέθοδο read_csv().
Η ακριβής λύση μπορεί να διαφέρει ανάλογα με το πραγματικό σας αρχείο, αλλά αυτή η προσέγγιση έχει λειτουργήσει για μένα σε αρκετές περιπτώσεις