Python似乎正在从我的数据中删除行

Python似乎正在从我的数据中删除行,python,pandas,Python,Pandas,如果我这样做 rr = pd.read_csv( 'refinedRatings.csv' ) lookrr = rr.loc[rr['user_id'] == 1] lookrr.head(30) 我的数据看起来像这样 Unnamed:0 user_id book_id rating 0 0 1 258 5 59 78 1 1796 5 148900 230483 1

如果我这样做

rr = pd.read_csv( 'refinedRatings.csv' ) 
lookrr = rr.loc[rr['user_id'] == 1]
lookrr.head(30)
我的数据看起来像这样

Unnamed:0   user_id book_id rating
0                0              1   258    5
59           78         1    1796  5
148900  230483  1   4691    4
148901  230485  1   2063    4
148902  230489  1   11     5
148903  230490  1   1644    5
148904  230492  1   136    5
148905  230493  1   6665    4
148906  230495  1   35  5
148907  230496  1   33  4
148908  230500  1   10  4
148909  230502  1   4        5
148910  230505  1   1521    5
148911  230506  1   70  5
148912  230509  1   36  4
148913  230512  1   32  4
148914  230513  1   13  4
148915  230514  1   66  4
rr = pd.read_csv( 'refinedRatings.csv' ) 
rrgb= rr.groupby('user_id')
rrgb.head(200)
Unnamed: 0  user_id book_id rating
0   0   1   258 5
1   1   2   4081    4
2   2   2   260 5
3   3   2   9296    5
4   5   2   26  4
5   7   2   33  4
6   8   2   301 5
7   9   2   2686    5
8   10  2   3753    5
9   11  2   8519    5
10  12  4   70  4
11  14  4   388 4
12  15  4   18  5
13  16  4   27  5
14  17  4   21  5
15  18  4   2   5
16  19  4   23  5
17  20  4   24  5
由于stackoverflow格式的原因,它不是很清晰,所以这里有一个图像

但是如果我像这样使用group by

Unnamed:0   user_id book_id rating
0                0              1   258    5
59           78         1    1796  5
148900  230483  1   4691    4
148901  230485  1   2063    4
148902  230489  1   11     5
148903  230490  1   1644    5
148904  230492  1   136    5
148905  230493  1   6665    4
148906  230495  1   35  5
148907  230496  1   33  4
148908  230500  1   10  4
148909  230502  1   4        5
148910  230505  1   1521    5
148911  230506  1   70  5
148912  230509  1   36  4
148913  230512  1   32  4
148914  230513  1   13  4
148915  230514  1   66  4
rr = pd.read_csv( 'refinedRatings.csv' ) 
rrgb= rr.groupby('user_id')
rrgb.head(200)
Unnamed: 0  user_id book_id rating
0   0   1   258 5
1   1   2   4081    4
2   2   2   260 5
3   3   2   9296    5
4   5   2   26  4
5   7   2   33  4
6   8   2   301 5
7   9   2   2686    5
8   10  2   3753    5
9   11  2   8519    5
10  12  4   70  4
11  14  4   388 4
12  15  4   18  5
13  16  4   27  5
14  17  4   21  5
15  18  4   2   5
16  19  4   23  5
17  20  4   24  5
然后数据看起来像这样

Unnamed:0   user_id book_id rating
0                0              1   258    5
59           78         1    1796  5
148900  230483  1   4691    4
148901  230485  1   2063    4
148902  230489  1   11     5
148903  230490  1   1644    5
148904  230492  1   136    5
148905  230493  1   6665    4
148906  230495  1   35  5
148907  230496  1   33  4
148908  230500  1   10  4
148909  230502  1   4        5
148910  230505  1   1521    5
148911  230506  1   70  5
148912  230509  1   36  4
148913  230512  1   32  4
148914  230513  1   13  4
148915  230514  1   66  4
rr = pd.read_csv( 'refinedRatings.csv' ) 
rrgb= rr.groupby('user_id')
rrgb.head(200)
Unnamed: 0  user_id book_id rating
0   0   1   258 5
1   1   2   4081    4
2   2   2   260 5
3   3   2   9296    5
4   5   2   26  4
5   7   2   33  4
6   8   2   301 5
7   9   2   2686    5
8   10  2   3753    5
9   11  2   8519    5
10  12  4   70  4
11  14  4   388 4
12  15  4   18  5
13  16  4   27  5
14  17  4   21  5
15  18  4   2   5
16  19  4   23  5
17  20  4   24  5
再说一次,图像

因此,group by操作似乎正在删除“user_id”等于1的几行

对此有什么解释吗

这是数据的直接链接

也适用于原始数据源

编辑:

我还将索引设置为
user\u id
,结果与使用
groupby

代码

结果

Unnamed: 0  book_id rating
user_id         
1   0   258 5
2   1   4081    4
2   2   260 5
2   3   9296    5
2   5   26  4
2   7   33  4
2   8   301 5
2   9   2686    5
2   10  3753    5
2   11  8519    5
4   12  70  4
4   14  388 4
4   15  18  5
4   16  27  5
4   17  21  5
4   18  2   5
4   19  23  5
4   20  24  5
同样,结果的图片

编辑:

作为预防措施,我将所有条目转换为str,然后再转换回int

rr = rr.applymap(str)
rr = rr.applymap(int)
这没有什么不同。上述代码的所有结果都是相同的。然而,有趣的是,在应用了数据类型更改之后,如果我查找所有带有字符串的条目,它会给我与以前一样的“groupby”相同的数据

rr[rr['user_id'].apply(lambda x: type(x)==str)]
rr.head(200)
结果

    Unnamed: 0  user_id book_id rating
0   0   1   258 5
1   1   2   4081    4
2   2   2   260 5
3   3   2   9296    5
4   5   2   26  4
5   7   2   33  4
6   8   2   301 5
7   9   2   2686    5
8   10  2   3753    5
9   11  2   8519    5

同样,结果的图片

@SantoshGupta7:我向您保证,您的数据不会被删除。之所以如此,是因为函数保留了数据帧的原始顺序。如果在groupby对象上调用.count()或任何其他聚合函数,您将看到所有数据仍然存在

要近似预期的.head()行为,可以执行以下操作:

rr = pd.read_csv('refinedRatings.csv') 
rrgb = rr.groupby('user_id')

print(rrgb.apply(lambda x: x.head(200)))

                 Unnamed: 0  user_id  book_id  rating
user_id                                              
1       0                 0        1      258       5
        59               78        1     1796       5
        148900       230483        1     4691       4
        148901       230485        1     2063       4
        148902       230489        1       11       5
        148903       230490        1     1644       5
        148904       230492        1      136       5
        148905       230493        1     6665       4
        148906       230495        1       35       5
        148907       230496        1       33       4
        148908       230500        1       10       4
        148909       230502        1        4       5
        148910       230505        1     1521       5
        148911       230506        1       70       5
        148912       230509        1       36       4
        148913       230512        1       32       4
您会注意到“user\u id”列仍然存在。这取决于groupby.head函数的特殊性质和/或您尚未对数据执行任何聚合的事实


有关“头部”问题的讨论,请参阅。

是巧克力文本编辑器还是您喜欢漫画版P但对于real,您确定每列中的值都是相同的数据类型吗?这是一个常见的罪魁祸首,一些字符串与数字混合在一起。lol字体是lexie可读的,可以修改。但实际上我不知道。我从github数据集中得到的,我会调查的。谢谢你的提示!好的,我刚刚使用了df.dtypes,它说所有的列都是int64。有人知道它是否有可能忽略第二种数据类型吗?df.info()给出了相同的信息,这似乎不是问题所在。如果数据在GITHUB上,考虑链接到它(如果是公共的),因为它会使它更容易帮助。用原始数据更新打开的帖子,这里和我使用的与我的GDRILE文件直接链接的精炼数据。