根据条件改变熊猫的日期值并转换为日期时间

我有一个数据框,其中的列看起来像一个日期,但实际上是一个对象(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

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

回答:

如果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)

回答:

你能用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

以上是 根据条件改变熊猫的日期值并转换为日期时间 的全部内容, 来源链接: utcz.com/qa/258890.html

回到顶部