【发布时间】:2021-08-15 04:08:39
【问题描述】:
我想知道如何处理和发现 pandas 中格式错误的数据。
我尝试将字符串转换为 pd 数据形式,但是, 中间某处的格式与预期的格式不符(我假设),弹出一条错误消息。
- 我想打印数据是什么
- 我想将其修复为可以继续前进的正确格式
- 我该如何处理这个问题?
我的代码如下。
def date_format(df):
target = pd.to_datetime(df['Issue Date'])
return target
错误信息是
----------------------------------- ---------------------------- TypeError Traceback(最近一次调用 最后的) ~/anaconda3/lib/python3.8/site-packages/pandas/core/arrays/datetimes.py 在 objects_to_datetime64ns(数据,dayfirst,yearfirst,UTC,错误, require_iso8601, allow_object) 2053 尝试: -> 2054 个值,tz_parsed = conversion.datetime_to_datetime64(data) 2055 # 如果 tzaware,这些值代表 unix 时间戳,所以我们
pandas/_libs/tslibs/conversion.pyx 在 pandas._libs.tslibs.conversion.datetime_to_datetime64()
TypeError:无法识别的值类型:
在处理上述异常的过程中,又发生了一个异常:
ValueError Traceback(最近调用 最后)在 ----> 1 seg0=generateDb(csv,2017,1000000,0)
在 generateDb(csv, year, segment, 指数) 2 3 targetSeg0=segment_df(csv,segment,index) ----> 4 targetSeg0['发布日期']=date_format(targetSeg0) 5 targetSeg0=remove_etc(targetSeg0) 6 filter_date(targetSeg0,year)
日期格式(df) 1 定义日期格式(df): ----> 2 target = pd.to_datetime(df['Issue Date']) 3 返回目标
~/anaconda3/lib/python3.8/site-packages/pandas/core/tools/datetimes.py 在 to_datetime(arg, 错误, dayfirst, yearfirst, UTC, 格式, 准确, 单位,infer_datetime_format,原点,缓存) 第797章 第798章 --> 799 cache_array = _maybe_cache(arg, format, cache, convert_listlike) 如果不是 cache_array.empty,则为 800: 801 结果 = arg.map(cache_array)
~/anaconda3/lib/python3.8/site-packages/pandas/core/tools/datetimes.py 在 _maybe_cache(arg, 格式, 缓存, convert_listlike) 第168章 169 如果 len(unique_dates) 170 cache_dates = convert_listlike(unique_dates, 格式) 171 缓存数组=系列(缓存日期,索引=唯一日期) 172 返回缓存数组
~/anaconda3/lib/python3.8/site-packages/pandas/core/tools/datetimes.py 在 _convert_listlike_datetimes(arg, 格式, 名称, tz, 单位, 错误, infer_datetime_format、dayfirst、yearfirst、exact) 457 断言格式为无或 infer_datetime_format 第458章 --> 459 结果,tz_parsed = objects_to_datetime64ns( 460 参数, 第461章
~/anaconda3/lib/python3.8/site-packages/pandas/core/arrays/datetimes.py 在 objects_to_datetime64ns(数据,dayfirst,yearfirst,UTC,错误, require_iso8601, allow_object) 2057 返回 values.view("i8"), tz_parsed 2058 除了 (ValueError, 类型错误): -> 2059 raise e 2060 2061 if tz_parsed is not None:
~/anaconda3/lib/python3.8/site-packages/pandas/core/arrays/datetimes.py 在 objects_to_datetime64ns(数据,dayfirst,yearfirst,UTC,错误, require_iso8601, allow_object) 2042 2043 尝试: -> 2044 结果,tz_parsed = tslib.array_to_datetime( 2045 数据,2046 错误=错误,
pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime()
pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime()
pandas/_libs/tslib.pyx 在 pandas._libs.tslib.array_to_datetime_object()
pandas/_libs/tslib.pyx 在 pandas._libs.tslib.array_to_datetime_object()
pandas/_libs/tslibs/parsing.pyx 在 pandas._libs.tslibs.parsing.parse_datetime_string()
pandas/_libs/tslibs/parsing.pyx 在 pandas._libs.tslibs.parsing._parse_delimited_date()
cpython.datetime.datetime_new()中的datetime.pxd
ValueError: day is out of range for month
我最终会按如下方式过滤数据。
def filter_date(df,year):
booldf = df['Issue Date'] >= pd.to_datetime(f"{year}-01-01")
booldf2 = df['Issue Date'] <= pd.to_datetime(f"{year}-12-31")
return df[
(df['Issue Date'] >= pd.to_datetime(f"{year}-01-01")) & (df['Issue Date'] <= pd.to_datetime(f"{year}-12-31"))
]
示例数据形式如下。
由于以下错误数据而发生错误。 (第 51 个月不存在).. 我想这就是错误的来源。
【问题讨论】:
-
请以代码形式提供数据样本(即
pd.DataFrame({'Issue Date': [...]}) -
@rudolfovic 谢谢!我刚刚添加了示例数据表单
-
使用:df = pd.DataFrame(["09/26/2016", "06/14/2017", "09/05/2018", "06/16/2017", " 05/09/2018"], columns=['date']) 它工作正常: pd.to_datetime(df.date) 输出一个数据框,其日期为 datetime64 列。请提供一个它不起作用的例子(用准确的代码来重现它)。谢谢
-
@n4321d 发生错误的地方是数据格式有异常的数据格式。整理数据框时可以排除虚假数据吗?例如,当我这样做时, target = pd.to_datetime(df['Issue Date']) "如果某些字符串看起来不正确,请将其排除并返回一个数据框。"