gpt4 book ai didi

python - 如何去除单列中的小数?

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:18 25 4
gpt4 key购买 nike

我正在尝试在 DataFrame 中将列转换为行以及将行转换为列。

      user_id    movie_id    rating
32236 1 1 5
23171 1 2 3
83307 1 3 4
62631 1 4 3
47638 1 5 3
26184 2 1 4
1333 5 1 4
172 5 2 3
54487 6 1 4
52430 7 4 5
18504 10 1 4
4617 10 4 4
44328 12 4 5
30881 13 1 3
4470 13 2 3
21009 13 4 5
39066 13 5 1

接下来我做了:

df = ratings.pivot_table(index=['movie_id'], columns='user_id', values='rating', fill_value='').rename_axis(None, axis=1).reset_index()
df

这是我得到的:

movie_id    1   2   5   6   7   10  12  13
0 1 5.0 4 4 4 4 3
1 2 3.0 3 3
2 3 4.0
3 4 3.0 5 4 5 5
4 5 3.0 1

问题是原始值不是小数,为什么排名的第一列('1'列)使用小数?以及如何正确修复它(不仅仅是从列中删除小数,而是像其他列一样修复它)。

最佳答案

我认为问题是将数值与非数值 fill_value='' 混合,然后 float 显示为整数:

df1 = ratings.pivot_table(index='movie_id', columns='user_id', values='rating', fill_value='')
print (df1)
user_id 1 2 5 6 7 10 12 13
movie_id
1 5.0 4 4 4 4 3
2 3.0 3 3
3 4.0
4 3.0 5 4 5 5
5 3.0 1

print (df1.applymap(type))
user_id 1 2 5 6 \
movie_id
1 <class 'float'> <class 'float'> <class 'float'> <class 'float'>
2 <class 'float'> <class 'str'> <class 'float'> <class 'str'>
3 <class 'float'> <class 'str'> <class 'str'> <class 'str'>
4 <class 'float'> <class 'str'> <class 'str'> <class 'str'>
5 <class 'float'> <class 'str'> <class 'str'> <class 'str'>

user_id 7 10 12 13
movie_id
1 <class 'str'> <class 'float'> <class 'str'> <class 'float'>
2 <class 'str'> <class 'str'> <class 'str'> <class 'float'>
3 <class 'str'> <class 'str'> <class 'str'> <class 'str'>
4 <class 'float'> <class 'float'> <class 'float'> <class 'float'>
5 <class 'str'> <class 'str'> <class 'str'> <class 'float'>

如果使用数字 fill_value=0 效果很好:

df = ratings.pivot_table(index='movie_id', columns='user_id', values='rating', fill_value=0)
print (df)
user_id 1 2 5 6 7 10 12 13
movie_id
1 5 4 4 4 0 4 0 3
2 3 0 3 0 0 0 0 3
3 4 0 0 0 0 0 0 0
4 3 0 0 0 5 4 5 5
5 3 0 0 0 0 0 0 1

如果值不需要聚合,只需要先转换为字符串,然后替换缺失值:

ratings['rating'] = ratings['rating'].astype(str)
df = ratings.pivot(index='movie_id', columns='user_id', values='rating').fillna('')
print (df)
user_id 1 2 5 6 7 10 12 13
movie_id
1 5 4 4 4 4 3
2 3 3 3
3 4
4 3 5 4 5 5
5 3 1

关于python - 如何去除单列中的小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54615004/

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