簡體   English   中英

Pandas 將列中的字符串替換為 int

[英]Pandas replace string in a column as int

我是 pandas 和 python 的初學者,尋求一點幫助。 這是我的數據集,k_symbol 列標簽為 UVER 或 SIPO,我想將 UVER 替換為 int 0,將 SIPO 替換為 int 1。

數據集

我嘗試了 dff.replace(to_replace=['k_symbol'], value=[1, 0]),但它似乎不正確。 感謝任何建議

apply()函數是出了名的慢,所以如果你關心速度,考慮這些解決方案之一

1) 地圖()

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

2) boolean 到 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

import pandas as pd

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

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

Output: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

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

使用這一行來獲得所需的結果。

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)

您可以傳遞一個匿名的 function (Lambda) 來說明在應用中檢查的條件。

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM