将具有数字和一些破折号的列转为int?

时间:2018-09-13 07:40:41

标签: python pandas

此列:

x['bags']

具有此:

bags
1
34
12
13
3
12
-
11
1

我想将其转换为int,因为它是一种对象类型。

我想像这样在groupby中使用它:

x.groupby(['user'])['bags'].sum()

并给出:

  

TypeError   :   +不支持的操作数类型:“ int”和“ str”

因此将其转换为int即可解决此问题。试过这个:

x['bags'].astype(str).astype(int)

但破折号有问题。

  

ValueError:以10为底的int()的无效文字:'-'

1 个答案:

答案 0 :(得分:0)

to_numericerrros=coerce一起用于将非数字转换为NaN s,并将另一个值转换为float s(因为NaNfloat设计),然后将sum与列x['user']聚合:

x = pd.DataFrame({'bags': ['1', '34', '12', '13', '3', '12', '-', '11', '1'], 
                  'user': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b']})
print (x)
  bags user
0    1    a
1   34    a
2   12    a
3   13    a
4    3    b
5   12    b
6    -    b
7   11    b
8    1    b

df = pd.to_numeric(x['bags'], errors='coerce').groupby(x['user']).sum().reset_index()
print (df)
  user  bags
0    a  60.0
1    b  27.0

详细信息

print (pd.to_numeric(x['bags'], errors='coerce'))
0     1.0
1    34.0
2    12.0
3    13.0
4     3.0
5    12.0
6     NaN
7    11.0
8     1.0
Name: bags, dtype: float64