Я понял, что есть проблема с сопоставлением столбца, когда я создал фрейм данных с использованием pd.read_csv и StringIO, чтобы преобразовать строку текста в dataframe, а затем сопоставить определенный столбец со словарем, поскольку столбец даст мне все NaN, которые отображаются. Почему это так?Python: ошибка сопоставления для преобразованного в StringIO csv dataframe и кадра данных pandas?
Напротив, у меня не возникла ошибка, когда я напрямую сопоставляю столбец со словарем, если столбец связан с файловым файлом pandas, который я непосредственно создал.
Вот код, где ошибка приходит в:
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
Возвращения это:
color size price classlabel
0 green NaN 10.1 class1
1 red NaN 13.5 class2
2 blue NaN 15.3 class1
Против этого:
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
Где я получаю это возвращается вместо:
color size price classlabel
0 green 1 10.1 class1
1 red 2 13.5 class2
2 blue 3 15.3 class1
Почему существует разница, когда я пытаюсь преобразовать то, что я читаю из файла Unicode?