代码之家  ›  专栏  ›  技术社区  ›  sds Niraj Rajbhandari

如何将整数转换为np.对象?

  •  0
  • sds Niraj Rajbhandari  · 技术社区  · 6 年前

    isinstance(-1, np.object) 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
    

    附加限制:

    1. 我无法控制CSV文件格式。
    2. CSV很大,我宁愿做手术 而不是整张桌子。
    3. 缺少一些字段(如 "" ,就这么过去了 na_values=-1 不是一个选择。
    4. df[c] 缺少\u值 到函数 do_complicated_analysis_on_a_series .
    2 回复  |  直到 6 年前
        1
  •  1
  •   DYZ    6 年前

    把对象列和数字列分开,区别对待如何?

    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])
    
        2
  •  1
  •   BENY    6 年前

    我们可以通过 isin

    df.isin([-1,'-1']).sum()
    
    Out[276]: 
    Numbers    1
    Strings    1
    dtype: int64