【问题标题】:How to validate csv data read by pandas.read_csv?如何验证 pandas.read_csv 读取的 csv 数据?
【发布时间】:2018-03-17 19:43:55
【问题描述】:

希望使用 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 是验证日期的最佳方式。这样做的好方法是什么?

【问题讨论】:

  • 看看这个answer他使用了Python的数据验证库
  • 发现无效数据后你想做什么?
  • 提出任何错误都可以。如果任何地方的日期格式无效,则 pd.to_datetime(df['Date']) 语句会引发 ValueError。
  • 那么,你就有答案了。
  • 不是真的:其他项目怎么样:必须在值、整数或十进制值列表中的项目?可能有一种调用 read_csv 的方法可以完成所有工作。在读取后进行验证可能效率很低。

标签: python pandas csv


【解决方案1】:

yesno 字段的“yes”或“no”。 (必须在值列表中):

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

【讨论】:

  • 谢谢。这很有帮助。
猜你喜欢
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多