【问题标题】:Pandas Dataframe Column Value Conversion from string to binary [duplicate]Pandas Dataframe列值从字符串到二进制的转换[重复]
【发布时间】:2021-07-17 13:46:35
【问题描述】:

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

我已经定义了一个如下的小函数-

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

然后我使用了“应用”函数来更新数据框中的值 -

train_docs['Class'] = train_docs['Class'].apply(numconv)

但我收到如下错误 -

我在这里做什么?它应该按照我的理解工作。

【问题讨论】:

  • 我认为map 是这里的解决方案。
  • 如果它的数据框很大,例如,以矢量化方式执行此操作可能会更快。 df['Class]=np.where((df['Class']=='education'),1,0)

标签: python pandas


【解决方案1】:

你可以使用地图-

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

【讨论】:

    【解决方案2】:

    当您使用pandas.Series.apply 方法时,给定函数应接受pandas.Series 所持有的内容,在本例中为strs,

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

    如果astr 将不起作用,您可以通过更改为来修复它

    def numconv(a):
        return {'education' : 1,'cinema' : 0}[a]
    

    或者在这种情况下,像这样使用pandas.Series.replace 方法

    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 会忽略未知值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2014-06-09
      • 2013-10-29
      • 2016-08-21
      • 2013-01-16
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多