如何使熊猫中的分隔符read_csv接受定义的空格范围作为分隔符

时间:2020-06-24 13:16:22

标签: python pandas csv

这个问题类似于How to make separator in pandas read_csv more flexible wrt whitespace, for irregular separators?

我有这种格式的文本文件

year    jan    feb    mar    apr    may    jun    jul    aug    sep    oct    nov    dec     win     spr     sum     aut     ann
2017    0.2    3.6    5.0    4.2    8.8   12.2   12.9   11.7    9.7    9.2    3.5    1.8    2.01    6.01   12.27    7.48    6.92
2018    2.4   -0.5    1.9    6.6    7.9   10.8   13.5   12.8    9.6    7.2    5.2    3.8    1.32    5.43   12.36    7.33    6.80
2019    0.9    1.8    4.4    3.6    6.5   10.8   13.3   12.6   10.0    7.2    3.6    2.9    2.22    4.85   12.25    6.90    6.49
2020    3.8    3.3    2.8    4.8    6.9                                                     3.31    4.81                        

文本文件[3-4]列之间的空格数量不规则,我不需要['win','spr','sum','aut','ann']列

首先,为了处理不规则空间,我使用了以下方法:

    parse_column = ['year']
    weather_data = pd.read_csv(StringIO(postString),delimiter=r'\s+',parse_dates=parse_column, engine='python')

但是,这将'win'和'spr'的值折叠为'jun'和'jul'

接下来我尝试了

    parse_column = ['year']
    weather_data = pd.read_csv(StringIO(postString),delimiter=r'\s[0-4]',parse_dates=parse_column, engine='python')

但这会导致

ValueError: 'year' is not in list

最后,我尝试像这样在导入过程中删除不必要的列:

parse_column = ['year']
weather_data = pd.read_csv(StringIO(postString),delimiter=r'\s+',parse_dates=parse_column, engine='python',usecols=['year','jan','feb','mar','apr','may','jun','jul','aug','sep','oct', 'nov','dec'])

但这会产生与第一次尝试相同的结果。

我希望缺少一个相对简单的正则表达式,但是r'\s[01-5]'上的变体要么排除'year'列,要么返回诸如x columns expected, y found之类的错误消息

我试图避免在加载后删除这些错误解析的值,因为随着时间的流逝,错误数据的变化很大。

0 个答案:

没有答案