我试图在我的数据框中删除一些空行。以下代码显示数据类型确实是稀疏的。
items_users_sparse_top_tags_df = items_users_sparse_pd.loc[tracks_tags_df.index]
items_users_sparse_top_tags_df.rename_axis('tracks', axis = 'index', inplace = True)
items_users_sparse_top_tags_df.dtypes
结果:
playlists
37i9dQZF1DX7KNKjOK0o75 Sparse[int64, 0]
37i9dQZF1DWT1y71ZcMPe5 Sparse[int64, 0]
37i9dQZF1DX1tyCD9QhIWF Sparse[int64, 0]
37i9dQZF1DWSXBu5naYCM9 Sparse[int64, 0]
3JwPVKISB9IBlE2RST1MVn Sparse[int64, 0]
0lDMDuxqUYRAHAg2aSB4Mh Sparse[int64, 0]
6JX1W7EUwl28ApynqRIzGd Sparse[int64, 0]
73pA7uClVdMP4UM4NHYkjw Sparse[int64, 0]
7rRuBmh62FSsGh7ymtIUl3 Sparse[int64, 0]
2moEpTGsu9XpWjc7DMCgH6 Sparse[int64, 0]
Length: 3990, dtype: object
当我尝试删除空的用户(作为转置后的行)时,dtype 正在更改。编码:
users_items_sparse_dropped = items_users_sparse_top_tags_df.T[(items_users_sparse_top_tags_df !=0).any()]
数据类型:
tracks
2res3Ptlahsu1kh5XtFhu4 object
4UGxnxGlpc7BB8Cbu8vITC object
63diy8Bzm0pHMAU37By2Nh object
6wBHYoPsAqS88OwfjCvlaq object
1aoaegj0Bv8p1N6dWyCDbr object
...
2IH4PRZxA3W6sIWcFU0GKZ object
2JKlf0IYz5oWsT3OCLyjpO object
0fa2P8krhE1K19MUUh0meb object
2CM7CAL7aJ5WkPU0oGbA96 object
0w2U0uERbUTJMNIKdTSUkj object
Length: 15679, dtype: object
虽然代码确实删除了空的用户作为行,但我更愿意保持数据帧稀疏,这样我就不必再次转换它。
使用稀疏数据帧而不是直接使用 scipy 稀疏格式的原因是将 ID 保留为索引,而不是在数据操作等过程中弄乱。
回答我自己的问题,问题是非空值的 int64 与空值的 nan 之间的兼容性,因为 nan 值被认为是浮点数。
当我转置矩阵时,dtypes 从 Sparse[int64, 0] 变为 dtype:O。
有一些解决方法 1) 使用 astype 将数据帧转换为浮动。2)如果有人真的想保留稀疏 int64 格式,则需要通过 using 创建一个新的稀疏pd.SparseDtype(int, fill_value = np.nan)
dtype :然后在数据帧操作后使用 astyp 进行转换。
最后,据我尝试,类似的限制适用于 numpy 稀疏格式。
PS 一个有趣的发现:https : //pandas.pydata.org/pandas-docs/stable/user_guide/integer_na.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句