熊猫将列中的字符串替换为int

时间:2020-07-12 18:03:52

标签: python pandas

我是熊猫和python的初学者,需要一点帮助。 这是我的数据集,k_symbol列标记UVER或SIPO,我想将UVER替换为int 0,将SIPO替换为int 1。

dataset

我尝试了dff.replace(to_replace = ['k_symbol'],value = [1,0]),但这似乎不正确。 感谢任何建议

6 个答案:

答案 0 :(得分:1)

apply()函数的速度非常慢,因此,如果您关心速度,请考虑以下解决方案之一

1)map()

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

2)布尔值到整数的转换

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用.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

答案 3 :(得分:0)

使用这一行来获得想要的结果。

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)

答案 4 :(得分:0)

您可以传递一个匿名函数(Lambda),说明要在apply中进行检查的条件。

df['k_symbol'] = df['k_symbol'].apply(lambda x : 0 if x == 'UVER' else 1 )

答案 5 :(得分:0)

我相信一种更好(更快)的方法是使用.eq()

df['k_symbol'] = df['k_symbol'].eq('SIPO').astype(int)