pandas 使用同一 Dataframe 中另一列的数字仅更改日期时间中的时间

up9lanfz  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(151)

我有一个类似下面的dataframe,其中day列中的日期格式为d-m-y:

AL = (['1','10-12-2022','2022-12-17 00:00:00'],
['1','10-12-2022','2022-12-17 00:00:00'],
['1','7','2022-12-17 00:00:00'])
    
Data = pd.DataFrame(AL,columns = ['Hour','Day','Day2'])

其中dtypes如下:

Day               object
Day2              object
Hour              object
dtype: object

这只是我实际df的一部分,它要大得多。目标是我想将datetime条目的小时更改为小时列中的任何数字,但问题是我有这个异常条目,它在整个过程中重复,导致错误。如何最好地处理它?
到目前为止,我只尝试了这个,但当它试图转换异常条目时,我得到了一个错误。

df_long['Day3']= pd.to_datetime(df_long['Day']) + pd.to_timedelta(df_long['Hour2'])

error: time data "7" doesn't match format "%d-%m-%Y", at position 6. You might want to try:
    - passing `format` if your strings have a consistent format;

我的理想输出是新列包含如下所示的datetime条目,在使用第一列中的hour条目之后;

10-12-2022 01:00:00

日期格式= dd-mm-yyyy
我想知道在一般情况下,什么是一个很好的方式选择,然后编辑特定的条目在df列,而忽略其他人?

flvlnr44

flvlnr441#

您可以通过使用特定的format来解析非标准的日期时间字符串格式,并将关键字errors设置为'coerce'以忽略无效的日期时间字符串来实现目标。EX:

df = pd.DataFrame(
    columns=["Hour", "Day", "Day2"],
    data=(
        ["1", "10-12-2022", "2022-12-17 00:00:00"],
        ["1", "10-12-2022", "2022-12-17 00:00:00"],
        ["1", "7", "2022-12-17 00:00:00"],
    ),
)

# Day column has non-standard format, so we specify a specific one to avoid ambiguities
df["Day"] = pd.to_datetime(df["Day"], format="%d-%m-%Y", errors="coerce")
# Day2 column has ISO 8601 format, so we can safely let the parser infer the format
df["Day2"] = pd.to_datetime(df["Day2"], errors="coerce")
# now add the hour column after parsing with appropriate unit
df["Day3"] = df["Day"] + pd.to_timedelta(df["Hour"].astype(int), unit="h")
print(df)
  Hour        Day       Day2                Day3
0    1 2022-12-10 2022-12-17 2022-12-10 01:00:00
1    1 2022-12-10 2022-12-17 2022-12-10 01:00:00
2    1        NaT 2022-12-17                 NaT

相关问题