2016-07-22 80 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