【发布时间】:2016-09-15 17:27:41
【问题描述】:
我正在尝试从 csv 文件中清除一些数据。我需要确保“持续时间”类别中的任何内容都与某种格式匹配。我就是这样处理的:
import re
import pandas as pd
data_path = './ufos.csv'
ufos = pd.read_csv(data_path)
valid_duration = re.compile('^[0-9]+ (seconds|minutes|hours|days)$')
ufos_clean = ufos[valid_duration.match(ufos.Duration)]
ufos_clean.head()
这给了我以下错误:
TypeErrorTraceback (most recent call last)
<ipython-input-4-5ebeaec39a83> in <module>()
6
7 valid_duration = re.compile('^[0-9]+ (seconds|minutes|hours|days)$')
----> 8 ufos_clean = ufos[valid_duration.match(ufos.Duration)]
9
10 ufos_clean.head()
TypeError: expected string or buffer
我之前使用了类似的方法来清理数据,而没有使用正则表达式。我做错了什么?
编辑:
MaxU 让我最接近,但最终奏效的是:
valid_duration_RE = '^[0-9]+ (seconds|minutes|hours|days)$'
ufos_clean = ufos
ufos_clean = ufos_clean[ufos.Duration.str.contains(valid_duration_RE)]
那里可能有很多冗余,我对 python 还很陌生,但它确实有效。
【问题讨论】:
-
ufos.Duration是什么?类型:type(ufos.Duration) -
这就是问题所在。我将尝试使用 ufos.Duration.apply(str)进行投射,看看是否有效 -
所以这种铸造方法不起作用。
ufos.Duration到一个字符串?
标签: python regex pandas dataframe