python - 过滤掉 Python DataFrame 中格式不正确的日期时间值

标签 python pandas dataframe datetime plotly

我有一个 DataFrame,其中一列存储日期。

但是,其中一些日期是格式正确的日期时间对象,例如 '2018-12-24 17:00:00'而其他则不是,并且存储为 '20181225'

当我尝试使用plotly绘制这些数据时,格式不正确的值变成了EPOCH日期,这是一个问题。

有什么方法可以获取仅包含日期格式正确的行的 DataFrame 副本吗?

我尝试使用

clean_dict= dailySum_df.where(dailySum_df[isinstance(dailySum_df['time'],datetime.datetime)])

方法,但由于“条件数组必须与自身形状相同”错误而不起作用。

    dailySum_df = pd.DataFrame(list(cursors['dailySum']))

    trace = go.Scatter(
        x=dailySum_df['time'],
        y=dailySum_df['countMessageIn']

    )
    data = [trace]
    py.plot(data, filename='basic-line')

最佳答案

应用dateutil.parser,另请参阅我的回答here :

import dateutil.parser as dparser
def myparser(x):
    try:
       return dparser.parse(x)
    except:
       return None

df = pd.DataFrame( {'time': ['2018-12-24 17:00:00', '20181225', 'no date at all'], 'countMessageIn': [1,2,3]})
df.time = df.time.apply(myparser)
df = df[df.time.notnull()]

输入:

                  time  countMessageIn
0  2018-12-24 17:00:00               1
1             20181225               2
2       no date at all               3

输出:

                 time  countMessageIn
0 2018-12-24 17:00:00               1
1 2018-12-25 00:00:00               2

与 Gustavo 的解决方案不同,它可以处理根本没有可识别日期的行,并根据您的问题过滤掉此类行。

如果您的原始时间列可能包含除日期本身之外的其他文本,请包含 fuzzy=True 参数,如下所示 here .

关于python - 过滤掉 Python DataFrame 中格式不正确的日期时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57029939/

相关文章:

python - 构建启用时区的应用程序时的最佳实践

python - 在没有循环的情况下更改列表中的值

Python动态多处理和信号问题

python - Pandas read_csv 并删除夏令时

python-3.x - 使用 pandas 清理数据时是否可以为特定列设置自定义定界符/分隔符?

python - pd.read_html 更改了数字格式

python - 如何为 WTForms SelectField 设置默认值?

python - 导入错误 : cannot import name 'ABCIndexClass' from 'pandas.core.dtypes.generic'

python - Pandas 汇总统计的经济状况调查有何不同?

python - 通过 Dataframe 的字符串拆分循环