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
这真的是正确的方法吗

附加限制:

  • 我无法控制CSV文件格式
  • CSV是巨大的,我宁愿对
    缺少的_值进行操作,而不是对整个表进行操作
  • 某些字段丢失(如在
    中),这在语义上与
    -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视为NaN
    pd.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中循环列时,情况并不太多。也许您的问题过于复杂了。