Python 如何将整数强制转换为np.object?
是的,我完全知道Python 如何将整数强制转换为np.object?,python,python-3.x,pandas,numpy,type-conversion,Python,Python 3.x,Pandas,Numpy,Type Conversion,是的,我完全知道isinstance(-1,np.object)返回True 但是,-1!=“-1”(显然)这就是我的问题所在 我从CSV文件中读取数据帧,其中-1用于表示缺少的数据: Numbers,Strings 1,A 2,-1 -1,B 并生产: Numbers Strings 0 1 A 1 2 -1 2 -1 B 使用d类型 Numbers int64 Strings object dt
isinstance(-1,np.object)
返回True
但是,-1!=“-1”
(显然)这就是我的问题所在
我从CSV文件中读取数据帧
,其中-1
用于表示缺少的数据:
Numbers,Strings
1,A
2,-1
-1,B
并生产:
Numbers Strings
0 1 A
1 2 -1
2 -1 B
使用d类型
Numbers int64
Strings object
dtype: object
我有一个缺少的\u值
变量,它是-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
这真的是正确的方法吗
附加限制:
缺少的_值进行操作,而不是对整个表进行操作
“
中),这在语义上与-1
不同,因此将na_值=-1
传递到读取csv
不是一个选项df[c]
和missing\u value
传递给一个函数do\u复杂的\u分析\u序列
我们可以通过
isin
df.isin([-1,'-1']).sum()
Out[276]:
Numbers 1
Strings 1
dtype: int64
我们可以通过
isin
df.isin([-1,'-1']).sum()
Out[276]:
Numbers 1
Strings 1
dtype: int64
将对象列和数字列分开并区别对待如何
part1 = (z.loc[:, z.dtypes != np.object] == -1).sum()
#Numbers 1
#dtype: int64
part2 = (z.loc[:, z.dtypes == np.object] == str(-1)).sum()
#Strings 1
#dtype: int64
如果需要,可以将结果连接到一个数据帧中
np.concat([part1, part2])
将对象列和数字列分开并区别对待如何
part1 = (z.loc[:, z.dtypes != np.object] == -1).sum()
#Numbers 1
#dtype: int64
part2 = (z.loc[:, z.dtypes == np.object] == str(-1)).sum()
#Strings 1
#dtype: int64
如果需要,可以将结果连接到一个数据帧中
np.concat([part1, part2])
为什么不告诉熊猫从一开始就把-1当作NaN呢
pd.read_csv('yourfile.csv',na_values=-1)
@DYZ:因为某些字段确实丢失了(因此被解读为na
)@sds:为什么这会阻止您使用na_values
?@user2357112:因为我不希望“
与-1
一样对待。好的,另一个选项是将数据帧转换为字符串,并将其与“-1”进行比较(z.astype('str')==“-1”).sum()
为什么不告诉熊猫从一开始就将-1视为NaNpd.read_csv('yourfile.csv',na_values=-1)
@DYZ:因为某些字段确实丢失了(因此被解读为na
)@sds:为什么这会阻止您使用na_values
?@user2357112:因为我不希望“
与-1
一样对待。好的,另一个选项是将数据帧转换为字符串,并将其与“-1”进行比较<代码>(z.astype('str')==“-1”).sum()我需要以“每列”为基础进行操作。另外,我的DF很大,所以我宁愿对缺少的_值
进行操作,也不愿对对象
进行操作。对象列可能同时包含-1
和“-1”
——但在我的特定情况下不是这样——因此我真的不喜欢isin
方法。我需要在“每列”的基础上进行操作。另外,我的DF很大,所以我宁愿在缺失的值上操作,而不是在DF
对象上操作。列可能同时包含-1
和“-1”
——虽然在我的特定情况下不是这样——所以我真的不喜欢isin
方法。但是你不必这样做。我的解决方案没有显式循环。我确实需要一个循环-我所做的远不止计算缺失的值。你的问题目前还不清楚。我建议你重写它。请看PS4-(没有太多的情况下你真的需要在pandas中的列中循环。也许你把问题复杂化了。但是你不必。我的解决方案没有显式循环。我确实需要循环-我所做的不仅仅是计算缺失的值。你的问题目前还不清楚。我建议你重写它。P请参见PS4;-(当您真正需要在pandas中循环列时,情况并不太多。也许您的问题过于复杂了。