2014-04-10 49 views
4

我有一個大約50,000條記錄的數據框;我注意到「.0」被添加在一列中的所有數字後面。我一直在試圖刪除「.0」,以便下表;用數字和字符串在數據框中刪除小數點使用Python

N | Movies    
1 | Save the Last Dance 
2 | Love and Other Drugs 
3 | Dance with Me  
4 | Love Actually  
5 | High School Musical 
6 | 2012.0  <----- 
7 | Iron Man  
8 | 300.0  <----- 
9 | Inception  
10 | 360.0  <----- 
11 | Pulp Fiction 

看起來像這樣;

N | Movies    
1 | Save the Last Dance 
2 | Love and Other Drugs 
3 | Dance with Me  
4 | Love Actually  
5 | High School Musical 
6 | 2012  <----- 
7 | Iron Man  
8 | 300  <----- 
9 | Inception  
10 | 360  <----- 
11 | Pulp Fiction 

挑戰是該列包含數字和字符串。

這是可能的,如果是的話,怎麼樣?

在此先感謝。

+0

當你說號碼你知道,如果數量實際上是一個字符串或者是它在現實中漂浮?如果它是一個字符串,那麼我的答案將起作用,否則它可能只是一個顯示問題,因爲即使存儲一個浮點數,它也會輸出到任何輸出格式設置 – EdChum

+0

您可以在讀取數據的位置發佈行嗎? (例如'pd.read_table/pd.read_csv'或類似的) – Matt

+0

@Ian你應該有足夠的代表現在upvote;) – EdChum

回答

4

使用功能,適用於整列:

In [94]: 

df = pd.DataFrame({'Movies':['Save the last dance', '2012.0']}) 
df 
Out[94]: 
       Movies 
0 Save the last dance 
1    2012.0 

[2 rows x 1 columns] 

In [95]: 

def trim_fraction(text): 
    if '.0' in text: 
     return text[:text.rfind('.0')] 
    return text 

df.Movies = df.Movies.apply(trim_fraction) 

In [96]: 

df 
Out[96]: 
       Movies 
0 Save the last dance 
1     2012 

[2 rows x 1 columns] 
+0

可能它'。適用(trim_fraction)'一次到多個列? – As3adTintin

+0

@As3adTintin是的東西像'df [list_cols] .apply(trim_fraction)'將工作 – EdChum

+0

感謝您的迴應。它似乎沒有爲我工作,我一定是錯誤的。你正在提出一些建議:'df ['a','b','c'] = df ['a','b','c']。apply(trim_fraction)'?是? – As3adTintin

0

這是給你的暗示,

在有效號碼的情況下,

a="2012.0" 
try: 
    a=float(a) 
    a=int(a) 
    print a 

except: 
    print a 

輸出:

2012 

在字符串的情況下,如 「與我共舞」

a="Dance with Me" 
try: 
    a=float(a) 
    a=int(a) 
    print a 

except: 
    print a 

輸出:

Dance with Me 
+0

Hi Fledging, 非常感謝您的回覆。 這個挑戰是我在數據框中有大約50,000條記錄。 此外,當我試圖做到這一點的整個記錄​​在列中使用; movies_v2 = int(movies [[「N」,「Movies」]]) 我得到了錯誤: TypeError:int()參數必須是字符串或數字,而不是'DataFrame'。 我正在尋找一種方式來搜索整個記錄並用「(」)替換「.0」。因此,列456.0中的任何值都將更改爲456. 謝謝。 – Ian

0
Python 2.7.2+ (default, Jul 20 2012, 22:15:08) 
[GCC 4.6.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> str1 = "300.0" 
>>> str(int(float(str1))) 
'300' 
>>> 
+1

'浮動( '鋼鐵俠') 回溯(最近通話最後一個): 文件 「」,1號線,在 ValueError異常:無法將字符串轉換爲float:鐵Man' – joaquin

相關問題