我正在学习机器学习(ML),我决定将其用于垃圾邮件和非垃圾邮件分类.

问题是,对于我使用的示例数据,它是邮箱主题、重要性和发件人的形式,其中每个都是一个字符串.我想要做的是把它们变成像[1,0,0]这样的向量,这样我就可以区分每个值.

我遇到的错误是不能用值替换向量,因为大小不匹配.

def vec(u_v):
    y = len(u_v)
    x = [0] * y
    for j in range(y):
        x[j] = 1
        u_v[j] = tuple(x.copy()) 
        x = [0] * y
    return u_v


def arrange(df):
    organized_df = df.copy()  
    for i in df.columns:
        unique_values = df[i].unique()
        replacement_values = vec(unique_values)
        for j in range(len(unique_values)):
            organized_df[i] = organized_df[i].replace({unique_values[j]: replacement_values[j]})

    return organized_df

这是我用来组织数据帧的两个函数,这是我收到的错误

ValueError: operands could not be broadcast together with shapes (1000,) (6,) 

我原以为会是这样的:

| Subject | Importance |
| -------- | -------- |
| [1,0,0]   | [0,0,1]   |
| [0,1,0]   | [1,0,0]   |

推荐答案

使用pandas,您可以使用get_dummies:

每个变量都转换为不同值的0/1变量.输出中的每一列都以一个值命名;如果输入是DataFrame,则原始变量的名称将附加在值之前.

import pandas as pd

df = pd.DataFrame({
    'Subject': ['spam', 'not-spam', 'spam', 'not-spam'],
    'Importance': ['low', 'high', 'medium', 'low']
})


organized_df = pd.get_dummies(df)

发帖主题:Re:Kolibrios

Subject_not_spam Subject_spam Importance_high Importance_low Importance_medium
0 1 0 1 0
1 0 1 0 0
0 1 0 0 1
1 0 0 1 0

Python相关问答推荐

带有pandas的分区列上的过滤器的多个条件read_parquet

除了Python之外,可以替代bare?

Polars Dataframe:如何按组删除交替行?

pandas DataFrame中类型转换混乱

按照行主要蛇扫描顺序对点列表进行排序

分组数据并删除重复数据

使用LineConnection动画1D数据

如何在Python中并行化以下搜索?

django禁止直接分配到多对多集合的前端.使用user.set()

无法使用DBFS File API路径附加到CSV In Datricks(OSError Errno 95操作不支持)

如何从pandas的rame类继承并使用filepath实例化

在极性中创建条件累积和

从spaCy的句子中提取日期

迭代嵌套字典的值

joblib:无法从父目录的另一个子文件夹加载转储模型

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

以异步方式填充Pandas 数据帧

我对这个简单的异步者的例子有什么错误的理解吗?