Как удалить десятичную в одном столбце? - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь преобразовать столбец в строку и строку в столбец в кадре данных.

      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») используются десятичные числа?И как исправить это правильно (не только удаляя десятичные дроби из столбца, но и исправить это так, как ожидалось, как и в других столбцах).

1 Ответ

0 голосов
/ 10 февраля 2019

Я думаю, что проблема заключается в смешивании числовых значений с нечисловыми fill_value='', тогда числа с плавающей запятой отображаются как целые числа:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...