python - 如何将整数转换为 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。额外的约束:
- 我无法控制 CSV 文件格式。
- CSV 很大,我宁愿
missing_value
在整个桌子上进行操作。 - 缺少某些字段(如 being
""
),这在语义上与 being 不同-1
,因此传递na_values=-1
toread_csv
不是一种选择。 - 事实上,我不只是计算缺失值,我将
df[c]
和传递missing_value
给一个函数do_complicated_analysis_on_a_series
。
解决方案
我们可以通过以下方式修复您的输出isin
df.isin([-1,'-1']).sum()
Out[276]:
Numbers 1
Strings 1
dtype: int64
推荐阅读
- ios - 如何使我的 ReferenceWritableKeyPath 类通用
- sql - 对二进制数据字段具有唯一约束的批量插入的最佳数据库
- python - 无法从同一 docker swarm 上运行的其他服务连接到 postgres 服务?
- angular - 登录后重定向用户不更新地址栏
- c++ - 重载运算符>>从二叉树中删除一个节点
- php - Facebook 登录 api 通过 https 使用 localhost
- excel - 将日期转换为正确的格式
- python - Python PIP 无法在后台子进程中工作
- qt - 如何在 mouseMove() 期间禁用 QTreeWidget 上的悬停?
- python - 使用 AJAX/Django 填写客户地址