希望使用Python和Pandas验证csv文件中的数据。在提供干净的数据时一切正常。但是,当数据出现问题时,很难找到问题。提出任何类型的错误都会很棒。这是一些伪代码:
dtypes = {'Date': 'str', 'yesno': 'str', 'int_val': 'int', 'decimal_value': 'str'}
df = pd.read_csv(filename, dtype=dtypes)
# Ensure exceptions are thrown for invalid data.
# valid date format in date. ValueError raised for invalid data.
pd.to_datetime(df['Date'])
# 'yes' or 'no' for the yesno field. (has to be in a list of values)
# valid integer for int_val.
# a valid integer or decimal number for decimal_value
我甚至不确定pd.to_datetime是验证日期的最佳方式。这样做的好方法是什么?
答案 0 :(得分:1)
'是'或者没有'对于yesno字段。 (必须在值列表中):
df.yesno.isin(['yes','no']).all() # Returns False if there are any other values
int_val的有效整数:
df.int_val.astype(int) # Throws an error if there are non-integers
# or, if int_val are floats:
import numpy as np
np.isclose(df.int_val.round(0),df.int_val.astype(int)).all()
decimal_value的有效整数或十进制数:
df.decimal_value.astype(float) # similar to above
使用pd.to_datetime()
验证日期可能是最好的;如有必要,您还可以指定日期的格式,例如使用关键字参数format = '%y-%m-%d'
,其中日期的格式为yyyy-mm-dd
。