【问题标题】:Create a function that encodes strings to binary without using SciKit Learn - python 3创建一个不使用 SciKit Learn 将字符串编码为二进制的函数 - python 3
【发布时间】:2021-05-26 21:11:13
【问题描述】:

创建一个函数,将所有字符串 't' 和 'f' 替换为 1s 和 0s...

这就是我所在的地方

def binary_encoding(df):
    for col in df.columns:
        replace_map = {'t':1, 'f': 0,}
        df.columns.map(replace_map) -- not sure what to do here
    return df

我尝试过伪代码,但不熟悉实现代码本身。这里使用的是replace 方法吗?我正在考虑使用字典映射值,正如您在上面可能有些理解的那样。有什么指点吗?

【问题讨论】:

  • 你有输入的例子吗?你为什么在你的案例中使用熊猫?

标签: python pandas user-defined-functions


【解决方案1】:

根本不需要使用.apply。只需使用DataFrame.replace() 方法:

def binary_encoding(df):
    return df.replace({"t": 1, "f": 0})

df = pd.DataFrame([['f', 'g', 'h'], ['j', 'k', 't']])
print(df)
   0  1  2
0  f  g  h
1  j  k  t

new_df = binary_encoding(df)
print(new_df)
   0  1  2
0  0  g  h
1  j  k  1

【讨论】:

    【解决方案2】:

    您需要将每个map 应用到一列并保存到该列中

    def binary_encoding(df: pd.DataFrame):
        replace_map = {'t': 1, 'f': 0, }
        for col in df.columns:
            if df[col].isin(['f', 't']).all(): 
                df[col] = df[col].map(replace_map)
        return df
    

    测试

    df = pd.DataFrame([['f', 'g', 'h'], ['j', 'k', 't']])
    print(df, "\n")
    df = binary_encoding(df)
    print(df)
    
    
       0  1  2
    0  f  g  h
    1  j  k  t
    
         0   1    2
    0  0.0 NaN  NaN
    1  NaN NaN  1.0
    

    【讨论】:

    • 这可行,但是我现在的问题是所有其他包含数字和字符串数据的列都显示为 NaN。此函数的目标是定位所有仅包含“f”和“t”的列并编码为二进制,同时保留所有其他数据。
    • 我试过了,数据框似乎没有变化
    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2015-12-16
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多