У меня есть фреймворк в пандах со смешанными столбцами данных int и str. Я хочу сначала объединить столбцы в кадре данных. Для этого мне нужно преобразовать int
столбец в формат str
. Я пытался сделать следующее:
mtrx['X.3'] = mtrx.to_string(columns = ['X.3'])
или
mtrx['X.3'] = mtrx['X.3'].astype(str)
но в обоих случаях это не работает, и я получаю сообщение об ошибке «не удается объединить объекты 'str' и 'int'». Объединение двух str
столбцов работает отлично.
Ответы:
Преобразовать серию
Не забудьте вернуть результат обратно:
Преобразуйте весь кадр
источник
Измените тип данных столбца DataFrame:
К int:
df.column_name = df.column_name.astype(np.int64)
По ул:
df.column_name = df.column_name.astype(str)
источник
apply(str)
в моем тесте с использованием он примерно в 4 раза медленнее, чем от @Jeffpd.Series(np.arange(1000000))
.df['A'] = df['A'].apply(str)
тоже работает. Ответ @Jeff мне не подходит.apply()
вместоastype()
: timeit.Timer ('c.apply (str)', setup = 'import pandas as pd; c = pd.Series (range ( 1000)) '). Timeit (1000) >>> 0.41499893204309046 >>> timeit.Timer (' c.astype (str) ', setup =' импортировать панды как pd; c = pd.Series (range (1000)) ' ) .timeit (1000) 0.8004439630312845Предупреждение : оба указанных решения ( astype () и apply () ) не сохраняют значения NULL ни в формате nan, ни в форме None.
Я считаю, что это исправлено реализацией to_string ()
источник
Используйте следующий код:
источник
Просто для дополнительной справки.
Все приведенные выше ответы будут работать в случае фрейма данных. Но если вы используете лямбда при создании / изменении столбца, это не сработает, потому что там он рассматривается как атрибут int, а не как серия pandas. Вы должны использовать str (target_attribute), чтобы преобразовать его в строку. См. Пример ниже.
источник