使用pandas.read_csv

时间:2017-09-28 08:30:23

标签: python file pandas csv dataframe

我有一个(法语)数据集,如下所示:

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被识别为float和integer,但由于其中有数千个分隔符,因此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

有什么建议吗?

1 个答案:

答案 0 :(得分:5)

如果您有不间断的空格,我会建议使用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 
]