python - 如何使pandas read_csv中的分隔符接受定义的空格范围作为分隔符
问题描述
这个问题类似于How to make separator in pandas read_csv more flexible wrt whitespace, for 不规则分隔符?
我有一个这种格式的文本文件
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]'
排除“年份”列或返回错误消息的变体,例如x columns expected, y found
我试图避免在加载后删除这些错误解析的值,因为随着我们一年的推移,错误数据的变化如此之多。
解决方案
推荐阅读
- javascript - 为什么 [NaN].includes(NaN) 在 JavaScript 中返回 true?
- sql - 如何在 sql 查询中使用选择、最大日期和声明?
- c# - C# 简单方法中的多个编译器错误。CS1547 和 CS1525
- c - 在更改命令选项顺序时,GCC 错误未定义对“sqrt”的引用
- django - 基于Django类的视图,使用django_filter时如何返回
- sql - 实体框架更新数据库未在 App_Data 文件夹中显示数据库
- php - 如何在 WooCommerce 中来自短代码的产品列表中使用价格过滤
- c# - 我的 Api 返回 201 状态,但客户端应用程序返回 500 状态,我缺少什么吗?
- elasticsearch - 使用带 jdbc 的 logstash 在 elsatic 搜索中触发完全导入
- javascript - 无法使用 Selenium JS 在 VueJS 中单击下拉测试网站