首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用DataFrame.apply()处理异常

如何使用DataFrame.apply()处理异常
EN

Stack Overflow用户
提问于 2017-05-20 12:23:09
回答 3查看 1.1K关注 0票数 2

我想要DataFrame.apply() dateutil.parser.parse到日期字符串的pandas数据框列,但有些单元格是NaN的,所以它引发了一个异常。处理这个问题的方法是什么?

我是否应该编写另一个函数来代替parse()来处理错误并应用它呢?以其他方式处理它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-20 12:26:22

我认为您需要带参数errors='coerce'to_datetime来将不可解析的值转换为NaT (pandas中datetime的NaN):

代码语言:javascript
复制
df['col'] = pd.to_datetime(df['col'], errors='coerce')

示例:

代码语言:javascript
复制
df = pd.DataFrame({'date' : ['2015-01-01 19:00:20', np.nan, '2015-02-03 17:00:00', 'NA']})
print (df)
                  date
0  2015-01-01 19:00:20
1                  NaN
2  2015-02-03 17:00:00
3                   NA

df['date'] = pd.to_datetime(df['date'], errors='coerce')
print (df)
                 date
0 2015-01-01 19:00:20
1                 NaT
2 2015-02-03 17:00:00
3                 NaT

print (df['date'].dtypes)
datetime64[ns]
票数 1
EN

Stack Overflow用户

发布于 2017-05-20 12:30:04

要使您当前的方法工作,您可以添加一个if else来检查该值是否为nan。

代码语言:javascript
复制
df.apply(lambda x: your_functions(x['col']) if pd.notnull(x['col']) else np.nan,axis=1)
票数 0
EN

Stack Overflow用户

发布于 2018-06-20 04:47:27

被接受的答案肯定适用于所提出的具体示例。然而,Pandas似乎确实缺乏处理转换异常的通用方法。我最近发布了一个pandas-mapper包,它可以更通用地解决这个问题(https://github.com/inside-track/pandas-mapper)。

在上面提到的情况下,可以使用pandas-mapper将错误记录重定向到另一个数据帧,然后可以相应地处理该数据帧。例如,假设我们有一个同时包含"name“和"birthdate”列的dataframe,我们必须对其进行转换以解析字符串date并将名称大写。pandas-mapper可以像这样使用

代码语言:javascript
复制
import pandas as pd
import pandas_mapper
import dateutil

df = pd.DataFrame({
    'name': ['alice', 'george', 'sam'],
    'birthdate': ['1996-01-01', '1997-06-21', 'Yesterday'],
})

mapping = df.mapping(
    [
        ('name', 'name', lambda v: v.capitalize()),
        ('birthdate', 'birthdate', dateutil.parser.parse),
    ],
    on_error='redirect'
)

mapping对象同时具有mappederrors属性,它们是包含映射记录和错误记录的数据帧。

mapping.mapped

代码语言:javascript
复制
| name   | birthdate  |
| -      | -          |
| Alice  | 1996-01-01 |
| George | 1997-06-21 |

mapping.errors

代码语言:javascript
复制
| name   | birthdate  | __error__                                         |
| -      | -          | -                                                 |
| sam    | Yesterday  | {'msg': 'ValueError(Yesterday): ('Unknown stri... |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44081879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档