Ich erkannte, dass es ein Problem mit der Zuordnung einer Spalte beim Erstellen eines Datenrahmens mit der pd.read_csv und StringIO, um eine Zeichenfolge in einen Datenrahmen zu konvertieren dann eine bestimmte Spalte mit einem Wörterbuch zuordnen, da die Spalte mir alles geben wird NaN-Werte, die zugeordnet sind. Warum ist das so?Python: Mapping-Fehler für eine StringIO konvertiert CSV-Datenrahmen im Vergleich zu Pandas Datenrahmen?
Im Gegensatz dazu habe ich keinen Fehler festgestellt, wenn ich die Spalte direkt mit einem Wörterbuch abbilde, wenn die Spalte von einem Pandas-Datenframe stammt, den ich direkt erstellt habe. Hier
ist der Code, wo der Fehler kommt in:
import pandas as pd
from io import StringIO
df1 = unicode('''
green, M, 10.1, class1
red, L, 13.5, class2
blue, XL, 15.3, class1
''')
df1 = pd.read_csv(StringIO(df1), header = None)
df1.columns = ['color', 'size', 'price', 'classlabel']
size_mapping = {
'XL':3,
'L': 2,
'M': 1,
}
df1['size'] = df1['size'].map(size_mapping)
print df1
Returns this:
color size price classlabel
0 green NaN 10.1 class1
1 red NaN 13.5 class2
2 blue NaN 15.3 class1
Versus dies:
import pandas as pd
from io import StringIO
df1 = pd.DataFrame([
['green', 'M', 10.1, 'class1'],
['red', 'L', 13.5, 'class2'],
['blue', 'XL', 15.3, 'class1']
])
df1.columns = ['color', 'size', 'price', 'classlabel']
size_mapping = {
'XL':3,
'L': 2,
'M': 1,
}
df1['size'] = df1['size'].map(size_mapping)
print df1
Wo ich diese stattdessen zurück zu bekommen:
color size price classlabel
0 green 1 10.1 class1
1 red 2 13.5 class2
2 blue 3 15.3 class1
Warum gibt es einen Unterschied, wenn ich versuche, das, was ich aus einer Unicode-Datei gelesen habe, zu konvertieren?