为什么熊猫自己将数据帧中的 int 值转换为浮点数?

Avi*_*vij 5 python-3.x pandas

我是新来的,理想情况下,我会在我从哪里学到idxmax 的这种用法的问题上对此发表评论:

我使用了相同的方法,下面是我的代码

df = pd.DataFrame(np.arange(16).reshape(4,4),columns=["A","B","C","D"],index=[0,1,2,3])
Run Code Online (Sandbox Code Playgroud)

一旦我df[(df>6)]在这个 df 上使用,这些 int 值就会变为浮点数吗?

        A   B   C   D
0   NaN NaN NaN NaN
1   NaN NaN NaN 7.0
2   8.0 9.0 10.0    11.0
3   12.0    13.0    14.0    15.0
Run Code Online (Sandbox Code Playgroud)

熊猫为什么要这样做?另外,我在某个地方读到我可以在系列上使用 dtype=object ,但是还有其他方法可以避免这种情况吗?

WeN*_*Ben 5

如果你确实想让 int 看起来像

\n\n
df.astype(object).mask(df<=6)\nOut[114]: \n     A    B    C    D\n0  NaN  NaN  NaN  NaN\n1  NaN  NaN  NaN    7\n2    8    9   10   11\n3   12   13   14   15\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以在此处此处查找更多信息

\n\n

这种权衡主要是出于内存和性能原因,并且也是为了使生成的 Series 继续为 \xe2\x80\x9cnumeric\xe2\x80\x9d。一种可能性是使用 dtype=object 数组代替。

\n\n

有关更多信息astype(object)

\n\n
df.astype(object).mask(df<=6).applymap(type)\nOut[115]: \n                 A                B                C                D\n0  <class \'float\'>  <class \'float\'>  <class \'float\'>  <class \'float\'>\n1  <class \'float\'>  <class \'float\'>  <class \'float\'>    <class \'int\'>\n2    <class \'int\'>    <class \'int\'>    <class \'int\'>    <class \'int\'>\n3    <class \'int\'>    <class \'int\'>    <class \'int\'>    <class \'int\'>\n
Run Code Online (Sandbox Code Playgroud)\n