2016-07-22 81 views
10

我有一个数据帧熊猫花车转换为字符串无小数

df = pd.DataFrame([ 
     ['2', '3', 'nan'], 
     ['0', '1', '4'], 
     ['5', 'nan', '7'] 
    ]) 

print df 

    0 1 2 
0 2 3 nan 
1 0 1 4 
2 5 nan 7 

我想这些字符串转换为数字,总结列和转换回字符串。使用astype(float)似乎让我的号码部分。然后用sum()进行求和。然后回到字符串应该也很容易astype(str)

df.astype(float).sum().astype(str) 

0  7.0 
1  4.0 
2 11.0 
dtype: object 

这几乎是我想要的。我想要整数的字符串版本。但花车有小数。我如何摆脱它们?

我想这

0  7 
1  4 
2 11 
dtype: object 

回答

11

在混合添加astype(int):例如与空单元格

df.astype(float).sum().astype(int).astype(str) 

0  7 
1  4 
2 11 
dtype: object 

示范。这不是从OP的要求,但满足诽谤者

df = pd.DataFrame([ 
     ['2', '3', 'nan', None], 
     [None, None, None, None], 
     ['0', '1', '4', None], 
     ['5', 'nan', '7', None] 
    ]) 

df 

     0  1  2  3 
0  2  3 nan None 
1 None None None None 
2  0  1  4 None 
3  5 nan  7 None 

然后

df.astype(float).sum().astype(int).astype(str) 

0  7 
1  4 
2 11 
3  0 
dtype: object 

因为OP没有指定他们希望当一列被全部失踪发生什么,呈现零是一个合理的选择。

然而,我们也可以丢弃这些列

df.dropna(1, 'all').astype(float).sum().astype(int).astype(str) 

0  7 
1  4 
2 11 
dtype: object 
+0

我相信你只是现在一些战略性downvoting的受害者。 +1来反击,因为你的回答在另一个之前。 – bernie

+0

感谢您关注@bernie – piRSquared

+0

这不会处理所有缺少值的行。 – dlm

1

转换前添加astype(int)字符串:

print (df.astype(float).sum().astype(int).astype(str)) 

产生期望的结果。

10

如果您的列包含空值,则转换为int(即.astype(int).astype(str))将不起作用;它往往是一个更好的主意,使用字符串格式化来显式指定字符串列的格式:

In [52]: df.astype(float).sum().applymap(lambda x: "{:.0f}".format(x)) 
Out[52]: 
0  7 
1  4 
2 11 
dtype: object 
+0

谢谢,这就是我一直在寻找的答案! – IanS

+0

我相信数据框的正确方法是'applymap',而不是'map'。 – IanS

+1

@IanS是的,你是对的,我使用的地图,因为我在格式化之前总结了列 – maxymoo