Pandas read_csv attend un nombre de colonnes incorrect, avec un fichier CSV irrégulier
J'ai un fichier csv qui a quelques centaines de lignes et de 26 colonnes, mais les quelques dernières colonnes seulement une valeur en quelques lignes et ils sont vers le milieu ou la fin du fichier. Quand j'essaie de le lire en utilisant read_csv() j'obtiens l'erreur suivante.
"ValueError: Attend à 23 colonnes, a obtenu 26 dans la ligne 64"
Je ne peux pas voir où à indiquer le nombre de colonnes dans le fichier, ou la façon dont il détermine le nombre de colonnes qu'il pense que le fichier doit avoir.
Le cliché ci-dessous
In [3]:
infile =open(easygui.fileopenbox(),"r")
pledge = read_csv(infile,parse_dates='true')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-b35e7a16b389> in <module>()
1 infile =open(easygui.fileopenbox(),"r")
2
----> 3 pledge = read_csv(infile,parse_dates='true')
C:\Python27\lib\site-packages\pandas-0.8.1-py2.7-win32.egg\pandas\io\parsers.pyc in read_csv(filepath_or_buffer, sep, dialect, header, index_col, names, skiprows, na_values, thousands, comment, parse_dates, keep_date_col, dayfirst, date_parser, nrows, iterator, chunksize, skip_footer, converters, verbose, delimiter, encoding, squeeze)
234 kwds['delimiter'] = sep
235
--> 236 return _read(TextParser, filepath_or_buffer, kwds)
237
238 @Appender(_read_table_doc)
C:\Python27\lib\site-packages\pandas-0.8.1-py2.7-win32.egg\pandas\io\parsers.pyc in _read(cls, filepath_or_buffer, kwds)
189 return parser
190
--> 191 return parser.get_chunk()
192
193 @Appender(_read_csv_doc)
C:\Python27\lib\site-packages\pandas-0.8.1-py2.7-win32.egg\pandas\io\parsers.pyc in get_chunk(self, rows)
779 msg = ('Expecting %d columns, got %d in row %d' %
780 (col_len, zip_len, row_num))
--> 781 raise ValueError(msg)
782
783 data = dict((k, v) for k, v in izip(self.columns, zipped_content))
ValueError: Expecting 23 columns, got 26 in row 64
source d'informationauteur chrisfs
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
names
paramètre. Par exemple, si vous avez fichier csv comme ceci:Et essaie de le lire, vous recevez l'erreur
Mais si vous passez
names
paramètres, vous obtiendrez le résultat:Espère que cela aide.
vous pouvez également charger un fichier CSV avec séparateur '^', à la charge de l'ensemble de la chaîne de caractères à une colonne, puis utiliser split pour briser la chaîne en obligatoire des délimiteurs. Après cela, vous faites un concat à fusionner avec l'original dataframe (si nécessaire).
Supposons que vous avez un fichier comme ceci:
Vous pouvez utiliser
csv.reader
pour nettoyer d'abord le fichier,et obtenez:
Si vous n'avez pas d'en-tête, vous pouvez utiliser:
et ensuite, vous pouvez convertir dictionnaire dataframe avec
Le problème avec la solution donnée est que vous devez connaître le nombre maximal de colonnes nécessaires. Je ne pouvais pas trouver une fonction directe de ce problème, mais vous pouvez certainement écrire un def qui peut:
Ici est la def (fonction) que j'ai écrit pour mes fichiers: