Python 将数据帧列值从字符串转换为二进制

Python 将数据帧列值从字符串转换为二进制,python,pandas,Python,Pandas,我正在尝试将列中的字符串值转换为二进制值。例如,下表中的映射类似于{'cinema':0,'education':1} 我定义了一个小函数,如下所示- def numconv(a): return a.map({'education' : 1,'cinema' : 0}) 然后我使用了“apply”函数来更新数据框中的值- train_docs['Class'] = train_docs['Class'].apply(numconv) 但我得到的错误如下- def numconv(a):

我正在尝试将列中的字符串值转换为二进制值。例如,下表中的映射类似于{'cinema':0,'education':1}

我定义了一个小函数,如下所示-

def numconv(a):
return a.map({'education' : 1,'cinema' : 0})
然后我使用了“apply”函数来更新数据框中的值-

train_docs['Class'] = train_docs['Class'].apply(numconv)
但我得到的错误如下-

def numconv(a):
return a.map({'education' : 1,'cinema' : 0})

我在这里干什么?按照我的理解应该可以用。

你可以用地图-

a = {'education' : 1,'cinema' : 0}
train_docs['Class'] = train_docs['Class'].map(a)

使用
时,应用
pandas.Series的
方法。给定函数应接受
pandas.Series
所包含的内容,在本例中为
str
s

def numconv(a):
    return a.map({'education' : 1,'cinema' : 0})
如果
a
str
,则将不起作用,您可以通过更改为来修复它

def numconv(a):
    return {'education' : 1,'cinema' : 0}[a]
或者在这种情况下,只需使用
.replace
方法
pandas.Series
就可以了

import pandas as pd
df = pd.DataFrame({"Class":["education","education","education","cinema","cinema"]})
df["Class"].replace({'education' : 1,'cinema' : 0},inplace=True)
print(df)
输出

   Class
0      1
1      1
2      1
3      0
4      0

注意,如果出现任何其他值,我建议的函数将失败,而
。replace
忽略未知值

我认为
map
是这里的解决方案。如果它是一个大数据帧,例如
df['Class]=np。其中((df['Class'='education'),1,0)