2017-04-13 78 views
0

我是熊貓新手,我剛開始採取包的多功能性。當用小練csv文件的工作,我把下面的數據:熊貓數據拉動 - 凌亂的字符串浮動

Rank Corporation Sector Headquarters Revenue (thousand PLN) Profit (thousand PLN) Employees 


1.ÿ PKN Orlen SA oil and gas P?ock 79 037 121 2 396 447 4,445 

2.ÿ Lotos Group SA oil and gas Gda?sk 29 258 539 584 878 5,168 

3.ÿ PGE SA energy Warsaw 28 111 354 6 165 394 44,317 

4.ÿ Jer¢nimo Martins retail Kostrzyn 25 285 407 N/A 36,419 

5.ÿ PGNiG SA oil and gas Warsaw 23 003 534 1 711 787 33,071 

6.ÿ Tauron Group SA energy Katowice 20 755 222 1 565 936 26,710 

7.ÿ KGHM Polska Mied? SA mining Lubin 20 097 392 13 653 597 18,578 

8.ÿ Metro Group Poland retail Warsaw 17 200 000 N/A 22,556 

9.ÿ Fiat Auto Poland SA automotive Bielsko-Bia?a 16 513 651 83 919 5,303 

10.ÿ Orange Polska telecommunications Warsaw 14 922 000 1 785 000 23,805 

我有兩個嚴重的問題,但我似乎無法找到解決辦法:在「Ravenue」

1)數據和「利潤」列被拉入字符串,因爲有趣的格式與數千之間的空格,我似乎無法弄清楚如何使熊貓轉換爲浮點值。

2)「Rank」列下的數據被拉入爲「1.?」,「2.?」那裏發生了什麼?再次,當我試圖用「1.」,「2」等更適合的方式重寫這些數據時。等等DataFrame只是不預算。

想法?建議?我也打開了徹底的抨擊,因爲我的問題可能是相當明顯和愚蠢 - 請原諒我缺乏經驗:)

+0

「滑稽的格式與成千上萬之間的空間」,實際上是波蘭(以及俄羅斯)的方式來分隔千。不幸的是,波蘭的數字區域似乎不被支持,但這個問題的第一個答案http://stackoverflow.com/questions/42937460/how-to-set-a-custom-thousands-separator提供了一種解決方法。至於第二個問題,我不確定'ÿ'來自哪裏(它們實際上代表文件的末尾,EOF),但'df ['Rank'] = df ['Rank']。str.strip('ÿ ')'應該照顧他們。 – DyZ

+0

1.您會發現在轉換或使用數據之前,您經常需要「清理」數據。試試'df ['Revenue'] = df ['Revenue']。apply(lambda value:float(value.replace('','')))'and as for 2,你可以分享原始樣本行CSV? – Quitty

+1

@Quitty避免調用'apply',除非絕對必要,因爲它會使您的代碼減慢數量級。 'df ['Revenue'] = df ['Revenue']。str.replace('','')。astype(float)'更高效。 – DyZ

回答

0

我會使用converters參數。

它傳遞給您的通話pd.read_csv

def space_float(x): 
    return float(x.replace(' ', '')) 

converters = { 
    'Revenue (thousand PLN)': space_float, 
    'Profit (thousand PLN)': space_float, 
    'Rank': str.strip 
} 

pd.read_csv(... converters=converters ...)