代码之家  ›  专栏  ›  技术社区  ›  Giordano Prashanth Babu

转换为整数数字字符串pandas dataframe

  •  1
  • Giordano Prashanth Babu  · 技术社区  · 6 年前

    我需要使用包含数值的列合并两个pandas数据帧。
    例如,这两个数据帧可以类似于以下数据帧:

    数据帧“a”

        a1   b1
    0  "x"  13560
    1  "y"  193309
    2  "z"  38090
    3  "k"  37212
    

    数据帧“b”

        a2    b2
    0  "x"  13,56
    1  "y"  193309
    2  "z"  38,09
    3  "k"  37212
    

    我需要做的是在b1/b2列上合并a和b。
    问题是,正如您所看到的,数据帧b'的一些值有些不同。首先,b'值不是整数而是字符串,而且,以0结尾的值是“四舍五入的”(13560--gt;13,56)。

    我试图做的是,替换逗号,然后将它们转换为in t,但这不起作用;更详细地说,这个过程不会添加缺少的零。
    这是我试过的代码:

    b['b2'] = b['b2'].str.replace(",", "")
    b['b2'] = b['b2'].astype(np.int64) # np is numpy
    

    有什么程序可以用来解决这个问题吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   jezrael    6 年前

    我认为需要创建布尔掩码来指定哪些值必须是多个:

    #or add parameter  thousands=',' to read_csv like suggest @Inder
    b['b2'] = b['b2'].str.replace(",", "", regex=True).astype(np.int64)
    
    mask = b['b2'] < 10000
    b['b2'] = np.where(mask, b['b2'] * 10, b['b2'])
    print (b)
      a2      b2
    0  x   13560
    1  y  193309
    2  z   38090
    3  k   37212
    
        2
  •  0
  •   Chris Adams    6 年前

    先用一个 apply 以及lambda函数:

    b.b2 = b.b2.apply(lambda x: int(x.replace(',','')) * 10 if ',' in x else int(x))