2016-08-09 102 views
1

Ich habe eine Datei mit 3'502'379 Zeilen und 3 Spalten. Das folgende Skript soll ausgeführt werden, sondern erhöht und Fehler in der Datumsverarbeitung Linie:Python Pandas produzieren Fehler beim Versuch, 'DATE' Spalte auf große Datenmenge

import matplotlib.pyplot as plt 
import numpy as np 
import csv 
import pandas 

path = 'data_prices.csv' 
data = pandas.read_csv(path, sep=';') 
data['DATE'] = pandas.to_datetime(data['DATE'], format='%Y%m%d') 

Dies ist der Fehler, der auftritt:

Traceback (most recent call last): 
    File "C:\Program Files\Python35\lib\site-packages\pandas\indexes\base.py", line 1945, in get_loc 
    return self._engine.get_loc(key) 
    File "pandas\index.pyx", line 137, in pandas.index.IndexEngine.get_loc (pandas\index.c:4066) 
    File "pandas\index.pyx", line 159, in pandas.index.IndexEngine.get_loc (pandas\index.c:3930) 
    File "pandas\hashtable.pyx", line 675, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12408) 
    File "pandas\hashtable.pyx", line 683, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12359) 
KeyError: 'DATE' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "C:\data\script.py", line 15, in <module> 
    data['DATE'] = pandas.to_datetime(data['DATE'], format='%Y%m%d') 
    File "C:\Program Files\Python35\lib\site-packages\pandas\core\frame.py", line 1997, in __getitem__ 
    return self._getitem_column(key) 
    File "C:\Program Files\Python35\lib\site-packages\pandas\core\frame.py", line 2004, in _getitem_column 
    return self._get_item_cache(key) 
    File "C:\Program Files\Python35\lib\site-packages\pandas\core\generic.py", line 1350, in _get_item_cache 
    values = self._data.get(item) 
    File "C:\Program Files\Python35\lib\site-packages\pandas\core\internals.py", line 3290, in get 
    loc = self.items.get_loc(item) 
    File "C:\Program Files\Python35\lib\site-packages\pandas\indexes\base.py", line 1947, in get_loc 
    return self._engine.get_loc(self._maybe_cast_indexer(key)) 
    File "pandas\index.pyx", line 137, in pandas.index.IndexEngine.get_loc (pandas\index.c:4066) 
    File "pandas\index.pyx", line 159, in pandas.index.IndexEngine.get_loc (pandas\index.c:3930) 
    File "pandas\hashtable.pyx", line 675, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12408) 
    File "pandas\hashtable.pyx", line 683, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12359) 
KeyError: 'DATE' 
+1

Immer noch Problem, wenn Sie 'data = pandas.read_csv (Pfad, sep = ';', nrows = 10000) '? – jezrael

+3

Ihre 'Daten' df hat keine' DATE' Spalte. Bitte posten Sie die Ausgabe von 'data.columns.tolist()' – MaxU

+0

Danke für den Hinweis, das ist die Ausgabe: '['\ UeffDATE', 'TICKER', 'PREIS']' Das ist seltsam, die Datei selbst tut definitiv fang damit nicht an. – Spurious

Antwort

4

die '\ufeffDATE' in der ersten Spalte Name zeigt, dass Ihre CSV Datei hat eine UTF-16 Byte Order Mark (BOM) signature so muss es entsprechend gelesen werden.

so dass diese versuchen, wenn Ihre CSV-Lesen:

df = pd.read_csv(path, sep=';', encoding='utf-8-sig') 

oder als @EdChum suggested:

df = pd.read_csv(path, sep=';', encoding='utf-16') 

beide Varianten richtig

PS arbeiten sollte this answer zeigt, wie mit Stücklisten umgehen

+0

Falsch, das ist utf-16 big endian: https://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding' FE FF' ist utf- 16 Big Endian – EdChum

+0

@EdChum 'encoding = 'utf-8-sig'' hat für mich funktioniert. – Spurious

+0

@EdChum, ich habe meine Antwort korrigiert. Eigentlich werden beide Varianten richtig funktionieren – MaxU