2017-09-28 76 views
2

我有一个(法文)的数据集,看起来像文件作为千分隔符如下:阅读CSV与空间使用pandas.read_csv

time;col1;col2;col3 
06.09.2017 05:30;329,02;5,7;259 
06.09.2017 05:40;500,5;6,6;261 
06.09.2017 05:50;521,73;6,7;266 
06.09.2017 06:00;1 091,33;9,1;273 
06.09.2017 06:10;1 262,43;10;285 

我尝试使用下面的命令来阅读:

import pandas as pd 
df=pd.read_csv("Example_dataset.csv", 
      index_col=0, 
      encoding='latin', 
      parse_dates=True, 
      dayfirst=True, 
      sep=';', 
      decimal=',', 
      thousands=' ') 

col2和col3被识别为浮点数和整数,但col1不会被识别为数字,因为数千个分隔符在那里。有没有简单的方法来读取这个数据集?设置thousands=' '似乎没有工作:

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 5 entries, 2017-09-06 05:30:00 to 2017-09-06 06:10:00 
Data columns (total 3 columns): 
col1 5 non-null object 
col2 5 non-null float64 
col3 5 non-null int64 
dtypes: float64(1), int64(1), object(1) 
memory usage: 160.0+ bytes 

有什么建议吗?

+0

尝试:'df.col1 = df.col1。 str.replace('','').astype(float)' –

+0

我刚刚测试了熊猫'0.20.1'并且你的代码有效,你使用的是哪个版本? – zipa

+0

这没有奏效。我认为这个空间是一个'不间断的空间' 我修改你的代码如下: 'df.col1 = df.col1.str.replace('\ s +','').str.replace(', ','。')。astype(float)' – Nickj

回答

4

如果你有非换空间,我建议更积极的正则表达式与str.replace

df.col1 = df.col1.str.replace('[^\d.,e+-]', '')\ 
       .str.replace(',', '.').astype(float) 

正则表达式

[  # character group 
^  # negation - ignore everything in this character group 
\d  # digit 
.  # dot 
e  # 'e' - exponent 
+-  # signs 
]