亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將字符串轉換為布爾值僅給出 False 值

將字符串轉換為布爾值僅給出 False 值

慕斯709654 2022-12-14 21:08:42
嘗試將數據(來自 csv 文件的字符串格式)轉換為布爾值(在數據框中),我“丟失”了有關其原始值的信息,所以現在所有值都是 boolean False。我試圖更改為布爾值的列如下:df['Col1'] =df['Col1'].astype('bool')df['Col2'] =df['Col2'].astype('bool')我也試過df.Col1 = np.where(df.Col1.eq('true'), True, False)df. Col2 = np.where(df.Col2.eq('true') | df.Col2.eq('tbc'), True, False)每列 Col1 和 Col2 的唯一值是:Col1: array([true, false, nan], dtype=object)Col2: array(['true', 'false', 'tbc', nan], dtype=object)我的原始數據集具有以下值。Col1      Col2true      truetrue      truefalse     falsenan       falsefalse     truetrue      tbc雖然它們被轉換為布爾值,但所有值都是 False:Col1      Col2False     FalseFalse     FalseFalse     FalseFalse     FalseFalse     FalseFalse     False我想將 TBC 視為 True。為什么我只得到 False 值?關于如何修復它的任何想法?原始數據集和代碼示例:Date                 Checked             Verified2018-05-23           FALSE                TRUE2018-05-24           TRUE                 TBC2018-05-26           FALSE                TBC2018-05-31            nan                 nan2019-12-01           TRUE                 TRUE2019-12-05           TRUE                 TBC2019-12-15           TRUE                 FALSE2019-12-23           FALSE                nan代碼讀取文件 csv:df=pd.read_csv(path, sep=';', engine='python')轉換為小寫df= df.apply(lambda x: x.astype(str).str.lower())將字符串轉換為布爾值df['Checked'] = np.where(df['Checked'].eq('true'), True, False)df['Verified'] = np.where(df['Verified'].eq('true') | df['Verified'].eq('tbc'), True, False)然后我測試有多少行具有值 Checked = True:len(df[df['Checked']=='true']) 輸出:153轉換為布爾值選中:df['Checked'] = np.where(df['Checked'].eq('true'), True, False)len(df[df['Checked']==True])輸出:153轉換Verified為布爾值:df['Verified'] = np.where(df['Verified'].eq('true') | df['Verified'].eq('tbc'), True, False)len(df[df['Verified']==True])輸出:(0預期60)
查看完整描述

2 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

您可以通過正則表達式和對兩列執行此操作df.replace:


df.astype(str).replace({'(?i)True|TBC': True, '(?i)False|nan': False}, regex=True)


    Col1   Col2

0   True   True

1   True   True

2  False  False

3  False  False

4  False   True

5   True   True

該模式不區分大小寫。


查看完整回答
反對 回復 2022-12-14
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

對我來說,這非常有效。由于您沒有給出確切的 csv 格式,我假設它會是這樣的:


Date;Checked;Verified

2018-05-23;FALSE;TRUE

2018-05-24;TRUE;TBC

2018-05-26;FALSE;TBC

2018-05-31;nan;nan

2019-12-01;TRUE;TRUE

2019-12-05;TRUE;TBC

2019-12-15;TRUE;FALSE

2019-12-23;FALSE;nan

然后我像你一樣調用了代碼:


df=pd.read_csv(path, sep=';', engine='python')

df=df.apply(lambda x: x.astype(str).str.lower())

df['Checked'] = np.where(df['Checked'].eq('true'), True, False)

df['Verified'] = np.where(df['Verified'].eq('true') | df['Verified'].eq('tbc'), True, False)

生成的數據框如下所示:


         Date  Checked  Verified

0  2018-05-23    False      True

1  2018-05-24     True      True

2  2018-05-26    False      True

3  2018-05-31    False     False

4  2019-12-01     True      True

5  2019-12-05     True      True

6  2019-12-15     True     False

7  2019-12-23    False     False

您使用哪個 python 和 pandas 版本?我用 Python 3.6.1 和 Pandas 1.04 測試了這個


查看完整回答
反對 回復 2022-12-14
  • 2 回答
  • 0 關注
  • 94 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號