Pandas заменить строку в столбце как int - PullRequest
2 голосов
/ 12 июля 2020

Я новичок в pandas и python, прошу немного помощи. Вот мой набор данных, столбцы k_symbol подписывают либо UVER, либо SIPO, я хочу заменить UVER как int 0, а SIPO как int 1.

набор данных

Я пробовал dff.replace (to_replace = ['k_symbol'], value = [1, 0]), но это кажется неправильным. Благодарим за любые предложения

Ответы [ 6 ]

1 голос
/ 12 июля 2020

apply() функции заведомо медленные, поэтому, если вам важна скорость, рассмотрите одно из этих решений

1) map ()

df["k_symbol"].map({"UVER":0, "SIPO":1})

2) преобразование логического значения в int

df["k_symbol"] = (df["k_symbol"] == "SIPO").astype(int)

Время

%%timeit
df["k_symbol"] = (df["k_symbol"] == "SIPO").astype(int)
10 loops, best of 3: 83.3 ms per loop

%%timeit
df['k_symbol'].apply(lambda x : 0 if x == 'UVER' else 1 )
1 loop, best of 3: 550 ms per loop

%%timeit
df["k_symbol"].map({"UVER":0,"SIPO":1})
10 loops, best of 3: 83.6 ms per loop

0 голосов
/ 12 июля 2020

Я считаю, что лучший (более быстрый) способ - использовать .eq():

df['k_symbol'] = df['k_symbol'].eq('SIPO').astype(int)
0 голосов
/ 12 июля 2020

Вы можете передать анонимную функцию (Lambda), устанавливающую условие для проверки в рамках apply.

df['k_symbol'] = df['k_symbol'].apply(lambda x : 0 if x == 'UVER' else 1 )
0 голосов
/ 12 июля 2020

Используйте эту единственную строку, чтобы получить желаемый результат.

df.k_symbol = df.k_symbol.apply(lambda o : 1 if o == 'SIPO' else 0 if o == 'UVER' else o)

Вы можете упростить его, как показано ниже, если все, кроме SIPO, будет 0

df.k_symbol = df.k_symbol.apply(lambda o : 1 if o == 'SIPO' else 0)
0 голосов
/ 12 июля 2020

Используйте .loc:

import pandas as pd

df = pd.DataFrame(
    [[1, "SIPO"], [0, "UVER"], [0, "UVER"], [0, "UVER"], [1, "UVER"],],
    columns=["gender", "k_symbol"],
)

df.loc[df["k_symbol"] == "SIPO", "k_symbol"] = 1
df.loc[df["k_symbol"] == "UVER", "k_symbol"] = 0

print(df)

Возврат:

   gender k_symbol
0       1        1
1       0        0
2       0        0
3       0        0
4       1        0
0 голосов
/ 12 июля 2020
import pandas as pd

df = pd.DataFrame(["SIPO","UVER"] * 3, columns=["k_symbol"])

df["k_symbol"].map({"UVER":0,"SIPO":1})

Вывод: df

  k_symbol
0     SIPO
1     UVER
2     SIPO
3     UVER
4     SIPO
5     UVER

сопоставлен:

0    1
1    0
2    1
3    0
4    1
5    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...