首页 > 解决方案 > 如何将整数转换为 np.object?

问题描述

是的,我完全知道isinstance(-1, np.object)return True

但是,-1 != "-1"(显然)这就是我的问题。

DataFrame从 CSV 文件中读取了一个-1用于表示丢失数据的文件:

Numbers,Strings
1,A
2,-1
-1,B

read_csv产生:

   Numbers Strings
0        1       A
1        2      -1
2       -1       B

dtypes

Numbers     int64
Strings    object
dtype: object

我有一个missing_value变量是-1

>>> missing_value = -1
>>> for c in z.columns:
      print(c,(z[c] == missing_value).sum())
Numbers 1
Strings 0
>>> (z.Strings == str(missing_value)).sum()
1

我明白为什么会这样。我的问题是如何修改循环,以便 DTRT:

for c in z.columns:
   print(c,(z[c] == (missing_value if np.issubdtype(z[c].dtype,np.number) else str(missing_value))).sum())
Numbers 1
Strings 1

这真的是正确的方法吗?

PS。额外的约束:

  1. 我无法控制 CSV 文件格式。
  2. CSV 很大,我宁愿missing_value在整个桌子上进行操作。
  3. 缺少某些字段(如 being ""),这在语义上与 being 不同-1,因此传递na_values=-1toread_csv不是一种选择。
  4. 事实上,我不只是计算缺失值,我将df[c]和传递missing_value给一个函数do_complicated_analysis_on_a_series

标签: pythonpython-3.xpandasnumpytype-conversion

解决方案


我们可以通过以下方式修复您的输出isin

df.isin([-1,'-1']).sum()

Out[276]: 
Numbers    1
Strings    1
dtype: int64

推荐阅读