2015-07-07 3 views
10

У меня возникли проблемы с применением верхнего регистра к столбцу в моем DataFrame.Применение верхнего регистра к столбцу в dataframe pandas

данныеframe - df.

1/2 ID - это головка колонны, в которой необходимо применять ВЕРХНИЙ.

Проблема состоит в том, что значения состоят из трех букв и трех чисел. Например, rrr123 является одним из значений.

df['1/2 ID'] = map(str.upper, df['1/2 ID']) 

я получил ошибку:

TypeError: descriptor 'upper' requires a 'str' object but received a 'unicode' error.

Как я могу применить верхний регистр к первым трем буквам в колонке DataFrame df?

+0

ул является метод класса ул и ожидает ул не юникод, 'ул .upper (u "foo") -> error' –

ответ

11

Это должно работать:

df['1/2 ID'] = map(lambda x: x.upper(), df['1/2 ID']) 
+0

, это дает мне ошибку - объект 'float' не имеет атрибута 'upper' ' – Gil5Ryan

+0

Ah ok, поэтому у вас есть некоторые значения, которые также не являются строками. Измените 'x.upper()' на 'str (x) .upper()' или 'unicode (x) .upper()'. –

+0

Вы мужчина, str (x) .upper() работал! – Gil5Ryan

5

str.upper() хочет простой старый Python 2 строки

unicode.upper() будет хотеть Юникода не строка (или вы получите TypeError: Дескриптор «верхний» требует «Юникод» объект, но получил «str»)

Так что я предлагаю использовать утиную печать и называть .upper() на каждом из ваших элементов, например

df['1/2 ID'].apply(lambda x: x.upper(), inplace=True) 
+0

Спасибо за вашу помощь! – Gil5Ryan

23

Если ваша версия панд является последней версией, то вы можете просто использовать vectorised метод строки upper:

df['1/2 ID'].str.upper() 
+0

отлично, как это сделать на месте? нет опции arg to upper()? – iratzhash

+0

@iratzhash, вы не можете назначить обратно так: 'df ['1/2 ID'] = df ['1/2 ID']. Str.upper()' – EdChum

+0

Да, я понял это. Я думал, что это будет комп. дорогая. Уже на грани моих вычислительных ресурсов. – iratzhash

Смежные вопросы