这个问题类似于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
之类的错误消息
我试图避免在加载后删除这些错误解析的值,因为随着时间的流逝,错误数据的变化很大。