如何对具有变化的值的数据帧进行一致的热编码?

2024-04-03

我正在获取数据帧形式的内容流,每个批次在列中具有不同的值。 例如,一批可能如下所示:

day1_data = {'state': ['MS', 'OK', 'VA', 'NJ', 'NM'], 
            'city': ['C', 'B', 'G', 'Z', 'F'], 
            'age': [27, 19, 63, 40, 93]}

另一个像:

day2_data = {'state': ['AL', 'WY', 'VA'], 
            'city': ['A', 'B', 'E'], 
            'age': [42, 52, 73]}

如何以返回一致数量的列的方式对列进行热编码?

如果我在每个批次上使用 pandas 的 get_dummies() ,它会返回不同数量的列:

df1 = pd.get_dummies(pd.DataFrame(day1_data))
df2 = pd.get_dummies(pd.DataFrame(day2_data))

len(df1.columns) == len(df2.columns)

我可以获得每一列的所有可能值,问题是即使有了这些信息,为每个每日批次生成一个热编码以使列数保持一致的最简单方法是什么?


好的,因为所有可能的值都是预先知道的。下面是一种稍微有点黑客的做法。

import numpy as np
import pandas as pd

# This is a one time process
# Keep all the possible data here in lists
# Can add other categorical variables too which have this type of data
all_possible_states=  ['AL', 'MS', 'MS', 'OK', 'VA', 'NJ', 'NM', 'CD', 'WY']
all_possible_cities= ['A', 'B', 'C', 'D', 'E', 'G', 'Z', 'F']

# Declare our transformer class
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.preprocessing import LabelEncoder, OneHotEncoder

class MyOneHotEncoder(BaseEstimator, TransformerMixin):

    def __init__(self, all_possible_values):
        self.le = LabelEncoder()
        self.ohe = OneHotEncoder()
        self.ohe.fit(self.le.fit_transform(all_possible_values).reshape(-1,1))

    def transform(self, X, y=None):
        return self.ohe.transform(self.le.transform(X).reshape(-1,1)).toarray()

# Allow the transformer to see all the data here
encoders = {}
encoders['state'] = MyOneHotEncoder(all_possible_states)
encoders['city'] = MyOneHotEncoder(all_possible_cities)
# Do this for all categorical columns

# Now this is our method which will be used on the incoming data 
def encode(df):

    tup = (encoders['state'].transform(df['state']), 
           encoders['city'].transform(df['city']),
           # Add all other columns which are not to be transformed
           df[['age']])

    return np.hstack(tup)

# Testing:
day1_data = pd.DataFrame({'state': ['MS', 'OK', 'VA', 'NJ', 'NM'], 
        'city': ['C', 'B', 'G', 'Z', 'F'], 
        'age': [27, 19, 63, 40, 93]})

print(encode(day1_data))
[[  0.   0.   1.   0.   0.   0.   0.   0.   0.   0.   1.   0.   0.   0.
    0.   0.  27.]
 [  0.   0.   0.   0.   0.   1.   0.   0.   0.   1.   0.   0.   0.   0.
    0.   0.  19.]
 [  0.   0.   0.   0.   0.   0.   1.   0.   0.   0.   0.   0.   0.   0.
    1.   0.  63.]
 [  0.   0.   0.   1.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
    0.   1.  40.]
 [  0.   0.   0.   0.   1.   0.   0.   0.   0.   0.   0.   0.   0.   1.
    0.   0.  93.]]


day2_data = pd.DataFrame({'state': ['AL', 'WY', 'VA'], 
            'city': ['A', 'B', 'E'], 
            'age': [42, 52, 73]})

print(encode(day2_data))
[[  1.   0.   0.   0.   0.   0.   0.   0.   1.   0.   0.   0.   0.   0.
    0.   0.  42.]
 [  0.   0.   0.   0.   0.   0.   0.   1.   0.   1.   0.   0.   0.   0.
    0.   0.  52.]
 [  0.   0.   0.   0.   0.   0.   1.   0.   0.   0.   0.   0.   1.   0.
    0.   0.  73.]]

请仔细阅读评论,如果仍有任何问题,请询问我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对具有变化的值的数据帧进行一致的热编码? 的相关文章

随机推荐

  • 无法将对象转换为 JSON

    早上好 当我尝试通过虚拟设备注册或登录时出现此错误 E StorageHelpers Failed to turn object into JSON java lang NullPointerException Attempt to inv
  • 使用 Apache POI 将列添加到 Excel

    我想知道如何使用 apache poi 在 xlsx 文件中添加新列 但我找不到任何东西 有什么办法可以做到这一点吗 或者是否有其他库可以解决这个问题 提前致谢 如果您的 Excel 文件包含已定义的现有行 则添加列的最快方法是在行上迭代一
  • Unity3D本地尺度问题

    下面的代码 Debug LogWarning updating scale fix scalefactor scaleFactor Current scale is cell transform localScale x cell tran
  • 运行时错误:CUDA 错误:设备端断言已触发 - 训练 LayoutLMV3 时

    我正在训练最新版本的layoutLMv3模型 但在开始训练时trainer train 出现以下错误 请帮我解决它 我使用的是 v100 4 GPU RuntimeError Traceback most recent call last
  • 选择所有选项值 php mysql

    我正在尝试从 MySQL 数据库中选择所有值 选项 a b 和 c 工作正常 但我不确定选择这三个选项的语法
  • 将复选框检查图像更改为自定义图像

    我正在尝试使用 CSS 更改复选框的默认 框图像 但它不起作用 有没有办法解决 class checkbox background url images button bullet normal png no repeat scroll 0
  • 在 iPhone 上管理 HTTP Cookie

    我想为 iPhone 移植一个使用 mechanize 的 python 应用程序 此应用程序需要登录网页并使用站点 cookie 转到该站点上的其他页面以获取一些数据 在我的 python 应用程序中 我使用 mechanize 进行自动
  • 为什么我可以在私有类型上使用 auto?

    我对以下代码的编译和运行感到惊讶 vc2012 gcc4 7 2 class Foo struct Bar int i public Bar Baz return Bar int main Foo f Foo Bar b f Baz err
  • 如何使用张量流服务使张量流集线器嵌入可服务?

    我正在尝试使用来自tensorflow hub的嵌入模块作为可服务 我是张量流新手 目前 我正在使用通用句子编码器 https tfhub dev google universal sentence encoder 1嵌入作为将句子转换为嵌
  • 单元测试模拟 - Node 17 + Typescript + ESM 模块

    有一个简单的问题我找不到答案 使用时 节点 17 打字稿 ESM package json 中的 类型 模块 我可以实现模拟吗仅用于一种功能 或模块 如果是这样 我可以举个例子吗 无论你使用什么框架 thanks 包 json test n
  • 如何暂时禁用 C/C++ 中的宏扩展?

    由于某种原因 我需要暂时禁用头文件和 undef MACRONAME将使代码编译 但它将在现有宏下进行 有没有办法禁用它 我应该提到 您并不真正知道宏的值 并且我正在寻找交叉编译器解决方案 至少应该在 GCC 和 MSVC 中工作 在 MS
  • PHP 中的缓存变量

    长话短说 我正在寻找快速有效地存储布尔变量的最佳方法 例如 当前用户是否浏览过此页面 布尔值 当前用户是否已为此页面投票 再次布尔 今天该用户有多少次通过投票获得积分 整数 这些变量将仅存储一天 即每天午夜它们将被删除 我可以想到五种方法来
  • SparkContext.getOrCreate() 用途

    目的是什么getOrCreate方法来自SparkContext班级 我不明白什么时候应该使用这个方法 如果我有 2 个 Spark 应用程序运行spark submit 在主要方法中 我用以下方法实例化 Spark 上下文SparkCon
  • 检查应用程序的互联网连接

    我需要检查用户是否已连接到互联网 然后才能继续 我使用 HttpClient 访问端点 如下所示 client http Client req http NewRequest GET url nil req SetBasicAuth use
  • Android 允许将多个文件上传(最大 150 MB)到 PHP 服务器

    我必须允许用户在从我的 Android 应用程序到 PHP 服务器的单个请求中上传多个文件 可以是图像 视频 音频 我正在使用 REST 网络服务 对于此功能 我使用以下代码 To upload the multiple documents
  • 没有为 Protobuf-net 中的 System.Management.Automation.PSObject 类型定义序列化程序

    这是我的课 ProtoContract internal class Powershellresults internal Powershellresults ProtoMember 1 public Collection
  • JAXB-@XmlMixed 用于读取@XmlValue 和@XmlElement

    我在这里看到了类似的问题 但它并没有帮助我解决问题 所以我在这里发布我的问题 看看是否有人可以修改我的代码以使其工作 问题 如何访问混合内容字符串值并将其保存在 setPhrase String value 方法中 标题 xml
  • 如何使用坐标数组获取最大/最小边界

    任何人都可以帮助我了解如何使用坐标数组获取最大 最小坐标的逻辑吗 我想要得到的是它可以从这些坐标数组中得到的最长距离 前任 var coordinates lat 231 lng 223l lat 43 lng 4323 lat 42312
  • NHibernate elt 字段

    有谁知道为什么 NHibernate 为多对多映射生成一个名为 elt 的 int 类型字段 我想知道为什么我需要它 谢谢 elt 字段是多对多映射中元素的外键 在连接表中 您应该看到两个外键列 id 对于父级 和 elt 对于元素 如果您
  • 如何对具有变化的值的数据帧进行一致的热编码?

    我正在获取数据帧形式的内容流 每个批次在列中具有不同的值 例如 一批可能如下所示 day1 data state MS OK VA NJ NM city C B G Z F age 27 19 63 40 93 另一个像 day2 data