Pandas.get_dummies () кодировка одного столбца [дубликат]

Самый простой способ - использовать commandArgs (). Пример. Сохраните приведенный ниже код как «options.R»:

options <- commandArgs(trailingOnly = TRUE)
options

Запустите с помощью «Rscript options.R x y z». Результат:

[1] "x" "y" "z"

i.e. список из 3 элементов, по одному на аргумент.

16
задан Simon 8 August 2015 в 01:58
поделиться

2 ответа

Да, вы используете его неправильно, Series.replace() по умолчанию не работает inplace, он возвращает замененный dataframe / series, вам нужно назначить его обратно на ваш файл данных / серии для его эффекта происходить. Или, если вам нужно сделать это на месте, вам нужно указать аргумент ключевого слова inplace как True. Пример -

data['sex'].replace(0, 'Female',inplace=True)
data['sex'].replace(1, 'Male',inplace=True)

. Кроме того, вы можете комбинировать приведенное выше в один вызов функции replace используя list для аргумента to_replace, а также аргумент value, Example -

data['sex'].replace([0,1],['Female','Male'],inplace=True)

Пример / Демо -

In [10]: data = pd.DataFrame([[1,0],[0,1],[1,0],[0,1]], columns=["sex", "split"])

In [11]: data['sex'].replace([0,1],['Female','Male'],inplace=True)

In [12]: data
Out[12]:
      sex  split
0    Male      0
1  Female      1
2    Male      0
3  Female      1

Вы можете также используйте словарь, пример -

In [15]: data = pd.DataFrame([[1,0],[0,1],[1,0],[0,1]], columns=["sex", "split"])

In [16]: data['sex'].replace({0:'Female',1:'Male'},inplace=True)

In [17]: data
Out[17]:
      sex  split
0    Male      0
1  Female      1
2    Male      0
3  Female      1
33
ответ дан Anand S Kumar 16 August 2018 в 04:00
поделиться
  • 1
    Использование словаря, а не двух списков кажется более естественным, ИМХО. – DSM 8 August 2015 в 02:08
  • 2
    Спасибо, добавили эту информацию в ответ. – Anand S Kumar 8 August 2015 в 02:10
  • 3
    Если я сделаю что-то подобное, я получу SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. – Stefan Falk 17 September 2017 в 12:50
  • 4
    Каков ваш код, возможно, вы также нарезаете исходный фреймворк (тем самым создавая копию) и пытаясь установить это? – Anand S Kumar 17 September 2017 в 20:13

Вы также можете попробовать использовать apply с get методом dictionary, как представляется, немного быстрее, чем replace:

data['sex'] = data['sex'].apply({1:'Male', 0:'Female'}.get)

Тестирование с помощью timeit:

%%timeit
data['sex'].replace([0,1],['Female','Male'],inplace=True)

Результат:

The slowest run took 5.83 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 510 µs per loop

Использование apply:

%%timeit
data['sex'] = data['sex'].apply({1:'Male', 0:'Female'}.get)

Результат:

The slowest run took 5.92 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 331 µs per loop

Примечание: apply со словарем следует использовать, если все возможные значения столбцов в фрейме данных определены в словаре else, оно будет пустым для тех, которые не определены в словаре.

4
ответ дан student 16 August 2018 в 04:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: