2017-08-26 1 views
2

Jetzt analysiere ich Titanic Herausforderung von Kaggel. Mein Code ist dies: codePandas read_csv lädt keine CSV mit Komma getrennt

Aber mein idealer Ausgangs ist: ideal output

in meinem letzten Code So ist

df["Age"].fillna(df.Age.median(), inplace=True) 

und Fehler tritt

--------------------------------------------------------------------------- 
KeyError         Traceback (most recent call last) 
/Users/XXXi/anaconda/envs/py36/lib/python3.6/site-packages/pandas/indexes/base.py in get_loc(self, key, method, tolerance) 
    2133    try: 
-> 2134     return self._engine.get_loc(key) 
    2135    except KeyError: 

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4433)() 

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4279)() 

pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13742)() 

pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13696)() 

KeyError: 'Age' 

During handling of the above exception, another exception occurred: 

KeyError         Traceback (most recent call last) 
<ipython-input-4-9763f0a9951c> in <module>() 
----> 1 df["Age"].fillna(df.Age.median(), inplace=True) 

/Users/XXXi/anaconda/envs/py36/lib/python3.6/site-packages/pandas/core/frame.py in __getitem__(self, key) 
    2057    return self._getitem_multilevel(key) 
    2058   else: 
-> 2059    return self._getitem_column(key) 
    2060 
    2061  def _getitem_column(self, key): 

/Users/XXXi/anaconda/envs/py36/lib/python3.6/site-packages/pandas/core/frame.py in _getitem_column(self, key) 
    2064   # get column 
    2065   if self.columns.is_unique: 
-> 2066    return self._get_item_cache(key) 
    2067 
    2068   # duplicate columns & possible reduce dimensionality 

/Users/XXXi/anaconda/envs/py36/lib/python3.6/site-packages/pandas/core/generic.py in _get_item_cache(self, item) 
    1384   res = cache.get(item) 
    1385   if res is None: 
-> 1386    values = self._data.get(item) 
    1387    res = self._box_item_values(item, values) 
    1388    cache[item] = res 

/Users/XXXi/anaconda/envs/py36/lib/python3.6/site-packages/pandas/core/internals.py in get(self, item, fastpath) 
    3541 
    3542    if not isnull(item): 
-> 3543     loc = self.items.get_loc(item) 
    3544    else: 
    3545     indexer = np.arange(len(self.items))[isnull(self.items)] 

/Users/XXXi/anaconda/envs/py36/lib/python3.6/site-packages/pandas/indexes/base.py in get_loc(self, key, method, tolerance) 
    2134     return self._engine.get_loc(key) 
    2135    except KeyError: 
-> 2136     return self._engine.get_loc(self._maybe_cast_indexer(key)) 
    2137 
    2138   indexer = self.get_indexer([key], method=method, tolerance=tolerance) 

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4433)() 

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4279)() 

pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13742)() 

pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13696)() 

KeyError: 'Age' 

Ich benutze sep=',' so kann ich wirklich nicht verstehen, warum dieser Code nicht kann getrennt in jedem Komma. Wie kann ich das beheben?

Ich folgte eine Antwort, aber Fehler passieren (ich weiß nicht, warum) error

Meine Daten data

Antwort

1

Achtung!

Das Hauptproblem war das Herunterladen der Daten. Wenn Sie ein Problem beim Laden und Verarbeiten des Kaggle Titanic-Datasets haben, können Sie die CSV-Datei erneut von here herunterladen und Ihr Programm erneut ausführen.


Sie können delimiter=',' passieren:

df = pd.read_csv("Desktop/data/train.csv", delimiter=',') 
print(df.head()) 

    PassengerId Survived Pclass \ 
0   1   0  3 
1   2   1  1 
2   3   1  3 
3   4   1  1 
4   5   0  3 

               Name  Sex Age SibSp \ 
0       Braund, Mr. Owen Harris male 22.0  1 
1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0  1 
2        Heikkinen, Miss. Laina female 26.0  0 
3  Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0  1 
4       Allen, Mr. William Henry male 35.0  0 

    Parch   Ticket  Fare Cabin Embarked 
0  0   A/5 21171 7.2500 NaN  S 
1  0   PC 17599 71.2833 C85  C 
2  0 STON/O2. 3101282 7.9250 NaN  S 
3  0   113803 53.1000 C123  S 
4  0   373450 8.0500 NaN  S 


print(df.columns) 

Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 
     'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], 
     dtype='object') 

Als nächstes Sie eine Zuordnung der Arten erstellen:

mapping = {'male' : 0, 'female' : 1} 

Und Sie rufen pd.Series.replace:

df.Sex = df.Sex.replace(mapping) 
print(df.Sex) 

0 0 
1 1 
2 1 
3 1 
4 0 
Name: Sex, dtype: int64 
+0

Nach Pandas Dokumentation 'Delimiter' ist nur alternative Name für sep: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html – StefanK

+0

@StefanK Aus meiner Erfahrung, da Es waren Fälle, in denen ich Dinge funktionierte, indem ich eine Kombination von ihnen verwendete oder die eine auf die andere wechselte. Ich denke, sie sind Ergänzungen füreinander, nicht Ersatz. Edit: Änderte meine Antwort leicht. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ Thx für ur answer.Ich folgte Ihrer Nachricht, aber AttributeError passieren.Ich aktualisierte meine Frage, wenn Sie etwas wissen, bitte helfen Sie mir. – user8385498

1

Ihre read_csv sehen gut aus, die in der gleichen Zeile scheint ersetzen Probleme zu verursachen.

Versuchen Sie zuerst, die CSV wie in der Variable df zu lesen. Auf diese Weise wird Ihr Code sauberer.

df = pd.read_csv('Desktop/data/train.csv',sep=',') 
df['Sex'] = df['Sex'].map({'female': 1, 'male': 0}) 

Aber Sie können den September Argument verlassen insgesamt als Komma Standardtrennzeichen

ist

tun Alternativ nehmen die Reinigung auf einer neuen Zeile ersetzen mit, nachdem Sie die Datei in df lesen und verwenden inplace=True:

df['Sex'].replace({'male': 0, 'female': 1}, inplace=True) 

Allgemeine Hinweise:

Kaggle wir bpage unterstützt das Teilen und Kommentieren von Skripten im Kernel-Bereich. Versuchen Sie, darauf zu schauen, um zu sehen, wie Sie über die Analyse gehen können, wenn Sie irgendwo stecken geblieben sind:

https://www.kaggle.com/c/titanic/kernels

+0

thx , ur Kommentare.Ihre Mittel, df = pd.read_csv ("Desktop/Daten/train.csv", sep = ',', inplace = True, regex = True).ersetzen ("männlich", 0) .replace ("weiblich", 1), richtig? – user8385498

+0

Aber mit diesem Code, ich habe einen Fehler, Typeerror Traceback (jüngste Aufforderung zuletzt) ​​ in () ----> 1 df = pd.read_csv ("Desktop/data/train.csv ", sep = ',', inplace = Wahr, regex = True) .replace (" männlich ", 0) .replace (" weiblich ", 1) TypeError: parser_f() hat ein unerwartetes Schlüsselwort erhalten Argument 'inplace', missverstehe ich deine Nachricht? – user8385498

+0

Ich habe meine ursprüngliche Antwort bearbeitet ... mache die Reinigung in der neuen Zeile – StefanK