2017-04-13 63 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 ...)