转换为整数数字字符串pandas数据框

时间:2018-08-27 09:43:30

标签: python python-3.x pandas dataframe

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

数据框“ 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

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

我试图做的是替换逗号,然后将其强制转换为int,但这是行不通的;更多详细信息,此过程不会添加缺少的零。
这是我尝试过的代码:

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

我可以使用任何程序来解决此问题吗?

2 个答案:

答案 0 :(得分:2)

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

#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

答案 1 :(得分:0)

首先使用apply和lambda函数更正该列:

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