【问题标题】:Changing a date value in pandas based on condition and converting to datetime根据条件更改熊猫中的日期值并转换为日期时间
【发布时间】:2018-05-16 18:22:06
【问题描述】:

我有一个数据框,其中有一列看起来像日期,但实际上是一个对象 (type 'O')。该列中的某些值的值为9999-12-31 00:00:00.000。从某种意义上说,它们是一行“无限期”有效的指标。

pd.to_datetime() 在这些值上失败并给出“日期超出范围”错误。我尝试编写一个函数,将值转换为字符串,然后检查第一个字符是否为 9,但这也不起作用。

只是为了让你相信我已经尝试过一些东西,这是我尝试过的两个功能:

def change_to_datetime(df, colname):
    for index, row in df.iterrows():
        string = str(row[12])
        if string[0] == '9':
            row[12] = '2018-01-01 00:00:00.000'
        row[12] = pd.to_datetime(row[12])
    return df

还有:

def change_to_datetime2(df, colname):
    mask = str(df.colname)[0] == '9'
    df.loc[mask, colname] = '2018-01-01 00:00:00.000'
    df[colname] = pd.to_datetime(df[colname])
    return df

我也在这里阅读了其他类似的问题,但它们对我没有帮助。我是熊猫的新手。

【问题讨论】:

    标签: python pandas datetime dataframe


    【解决方案1】:

    如果9999 是唯一的问题,您可以使用errors='coerce' 将无效输入转换为NaT 空值。然后你可以用'2018-01-01 00:00:00.000'填写这些

    使用它并将其分配给您想要的任何列

    filler = pd.to_datetime('2018-01-01')
    pd.to_datetime(df[colname], errors='coerce').fillna(filler)
    

    【讨论】:

      【解决方案2】:

      你能用df.replace()替换字符串'9999-12-31 00:00:00.000'吗?

      df.replace(to_replace='9999-12-31 00:00:00.000', value='2018-01-01 00:00:00.000', inplace = True)

      https://pandas.pydata.org/pandas-docs/version/0.21/generated/pandas.DataFrame.replace.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 2020-12-18
        相关资源
        最近更新 更多