Python 获得;设置为“复制警告”;在使用熊猫执行一次热编码时
我在Python中遇到了设置为CopyWarning的Python 获得;设置为“复制警告”;在使用熊猫执行一次热编码时,python,pandas,Python,Pandas,我在Python中遇到了设置为CopyWarning的。我在网上搜索过,但似乎所有的解决方案都不适合我 输入数据如下所示: id genre 0 1 Drama, Romance 1 2 Action, Drama 2 3 Action, Comedy 3 4 Thriller 预期结果应该是: id Drama Romanc
。我在网上搜索过,但似乎所有的解决方案都不适合我
输入数据如下所示:
id genre
0 1 Drama, Romance
1 2 Action, Drama
2 3 Action, Comedy
3 4 Thriller
预期结果应该是:
id Drama Romance Action Comedy Thriller
0 1 1 1 0 0 0
1 2 1 0 1 0 0
2 3 0 0 1 1 0
3 4 0 0 0 0 1
我想获取输入数据的子集,添加一些列,修改添加的列,然后返回子集。基本上,我不想修改原始的数据
,我只想得到一个子集,它应该是一个全新的数据帧:
# the function to deal with the genre
def genre(data):
subset = data[['id', 'genre']]
for i, row in subset.iterrows():
if isinstance(row['genre'], float):
continue
genreList = row['genre'].split(', ')
for genre in genreList:
if genre in list(subset):
subset.loc[i][genre] = 1
else:
subset.loc[:][genre] = 0
subset.loc[i][genre] = 1
return subset
我尝试了很多方法,但都没有摆脱copywarning的设置:
subset=data[['A','B']].copy()
subset=data.filter(['A','B',axis=1)
subset=pd.Dataframe(数据['A','B']])
subset=data.copy()
subset=pd.DataFrame({'id':list(data.id),'genre':list(data.genre)})
有人知道如何解决这个问题吗?或者有没有办法超越警告
提前谢谢 不需要迭代,也不需要子集。您可以使用str.get\u dummies
df.drop('genre', 1).join(df['genre'].str.get_dummies(sep=', '))
id Action Comedy Drama Romance Thriller
0 1 0 0 1 1 0
1 2 1 0 1 0 0
2 3 1 1 0 0 0
3 4 0 0 0 0 1
结果是一个新的数据帧,您可以将其分配给其他对象(df2=…
)。不需要迭代,也不需要子集。您可以使用str.get\u dummies
df.drop('genre', 1).join(df['genre'].str.get_dummies(sep=', '))
id Action Comedy Drama Romance Thriller
0 1 0 0 1 1 0
1 2 1 0 1 0 0
2 3 1 1 0 0 0
3 4 0 0 0 0 1
结果是一个新的数据帧,您可以将其分配给其他对象(df2=…
)。该方法非常方便。@jlandcy我的测试表明str.get\u假人可以比pd.get\u假人更快,因为前者是为编码字符串而优化的。该方法非常方便。@jlandcy我的测试表明str.get_假人可以比pd.get_假人更快,因为前者是为编码字符串而优化的。