Один из столбцов фрейма данных pandas содержит значения, такие как 0, 'a', 'b'. Этот столбец разбирается как строка. Теперь я хочу преобразовать его в целое число, чтобы получить 0, 1, 2. Как я могу это сделать?Как преобразовать строки строк в целое число
ответ
Вот некоторые исходные данные:
df = pd.DataFrame({'col': [0, 'a', 'b', 'a']})
>>> df
col
0 0
1 a
2 b
3 a
Вы можете создать словарь элементы, которые вы хотели бы заменить:
d = {'a': 1, 'b': 2}
Затем примените get
к колонку, возвратившись-е е исходное значение, если оно не в словаре:
df['col'] = df.col.apply(lambda x: d.get(x, x))
>>> df
df
col
0 0
1 1
2 2
3 1
@EdChum Если все уникальные предметы, содержащиеся в серии в ключей словаря, то .map(d)
более чем в пять раз быстрее. Однако любое отсутствующее значение отображается как NaN
. Использование функции lambda
с get
в словаре, по-видимому, имеет практически идентичную производительность.
%%timeit df = pd.DataFrame({'col': [0, 'a', 'b', 'a'] * 100000})
df['col'] = df.col.map(d)
10 loops, best of 3: 33.3 ms per loop
>>> df.head()
col
0 NaN
1 1
2 2
3 1
4 NaN
%%timeit df = pd.DataFrame({'col': [0, 'a', 'b', 'a'] * 100000})
df['col'] = df.col.apply(lambda x: d.get(x, x))
10 loops, best of 3: 188 ms per loop
%%timeit df = pd.DataFrame({'col': [0, 'a', 'b', 'a'] * 100000})
df['col'] = df.col.map(lambda x: d.get(x, x))
10 loops, best of 3: 188 ms per loop
In [64]: %timeit df['col'] = df.col.map(d)
10 loops, best of 3: 36.1 ms per loop
И вот сумасшедшая часть. Я проверил это несколько строк кода ранее и получили разные результаты:
%%timeit df = pd.DataFrame({'col': [0, 'a', 'b', 'a'] * 100000})
df['col'] = df.col.map(d)
10 loops, best of 3: 33.4 ms per loop
>>> df.head()
col
0 0
1 1
2 2
3 1
4 0
>>> pd.__version__
'0.16.2'
Используйте для этого 'map', это cyython-ised:' df [col] .map (d) ' – EdChum
Держите это просто и глупо, потому что это выглядит очень просто попробовать этот подход:
if value == 'a':
x = 1
if value == 'b':
x = 2
else:
x = 0
le = preprocessing.LabelEncoder() из sklearn выполняет задание –
показать нам некоторый код подход пожалуйста – AndreL
Можете ли вы показать репрезентативную выборку данных, ваши попытки и желаемый результат, ваше объяснение слишком основным здесь – EdChum