Самый простой способ - использовать commandArgs (). Пример. Сохраните приведенный ниже код как «options.R»:
options <- commandArgs(trailingOnly = TRUE)
options
Запустите с помощью «Rscript options.R x y z». Результат:
[1] "x" "y" "z"
i.e. список из 3 элементов, по одному на аргумент.
Да, вы используете его неправильно, 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
Вы также можете попробовать использовать 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, оно будет пустым для тех, которые не определены в словаре.
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
. – Stefan Falk 17 September 2017 в 12:50