gpt4 book ai didi

Python pandas - 提取多值属性

转载 作者:行者123 更新时间:2023-12-01 09:33:25 24 4
gpt4 key购买 nike

我刚刚开始使用 Python,想使用 Movielens 数据集上的 numpy/pandas 包进行数据准备(特别是包含 MovieID、电影名称、年份以及流派的文件)。

截图:movielens - movie dataset

“类型”列是一个多值列,这对我来说是一个问题,因为我想尝试在数据集上使用机器学习算法。

目标:我想要获得关于电影属于哪种类型以及不属于哪种类型的是/否或 0/1 信息。

想法:检查“流派”列是否包含附加列的列名称(单个流派名称)。如果是,请写"is",否则请在单元格中写“现在”。这会迭代所有新列和所有行。

到目前为止已完成:我将空/NaN 列附加到每个流派的数据框中。我还尝试使用 dataframe.iloc['Genre'].str.contains(list(dataframe)[4]) ,如果名称匹配或不匹配,它会给我结果 TRUE 或 FALSE。但如何以优雅的方式迭代并写入单元格呢?

提前非常感谢。最好的,马塞尔

编辑:在这里您将找到我迄今为止所取得的成就。我使用管道分隔符拆分流派列中的数据,重命名列并附加新列并删除旧列。如果我现在在所有列上使用 get_dummies 函数,它会创建例如a 'Genre1_Action'、'Genre1_Adventure'、...、'Genre3Thriller',根据类型单元格中显示的文本值。我想要实现的是每个类型为每部电影都有其单独的列。

# create a small test subset
subset1 = movie_data [0:9]
print("Original Dataset")
print(subset1)
# Split movie year and year in separate values -> append them to the df -> clean the Year column
tempY = subset1['MovieNameYear'].str.split('(').apply(pd.Series)
tempY.columns = ['MovieName','Year']
subset1 = pd.concat([subset1,tempY], axis=1, join='inner')
subset1['Year'] = subset1['Year'].str.replace(')','')
del subset1['MovieNameYear']

# split the column 'Genre' with the with the pipe separator in seperate columns
# name the columns of the temp value with the splitted values
# join the through split created columns to the existing subset and delete the original multi value column
tempG = subset1['Genre'].str.split('|').apply(pd.Series)
tempG.columns = ['Genre1','Genre2','Genre3']
subset1 = pd.concat([subset1, tempG], axis=1, join='inner')
del subset1['Genre']
print("Cleaned Dataset")
print(subset1)

dummiesTemp = pd.get_dummies(data=subset1, columns=['Genre1','Genre2','Genre3'])
print(dummiesTemp)

最佳答案

如果我很理解你的意思,你希望每个流派都有一个专栏,表示 T/F。我建议您查看get_dummies功能

import pandas as pd
s = pd.Series(list('abca'))
pd.get_dummies(s)

更新 - 如果您有具有 double 值的列,您可以在之前或之后拆分它们。之后分割的示例(猜测它是最快的,但应该进行测试)。代码可以更漂亮,但希望它清晰。

import pandas as pd
import numpy as np

s = pd.Series(['a', 'b', 'c', 'a|b', 'a|d'])
d = pd.get_dummies(s)

columns = list(d)
for col in columns:
if '|' in col:
for l in col.split('|'):
if l in columns:
d[l] = np.maximum(d[l].values, d[col].values)
else:
d[l] = d[col]

关于Python pandas - 提取多值属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49757970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com