Python:在两个日期时间列中匹配相同的日期格式

时间:2021-07-01 19:52:30

标签: python pandas dataframe datetime timezone

我有以下包含两个日期的数据框,其中一个包含时区。

import React from "react";
import "./App.css";
import { Container } from "react-bootstrap";
import SignUp from "./components/common/SignUp";
import { AuthProvider } from "./contexts/AuthContext";

function App() {
  /* const classes = useStyles(); */

  return (
    <AuthProvider>  
        <Container 
        className="d-flex align-items-center justify-content-center"
        style={{ minHeight: "100vh"}}
        >
        <div className="w-120" style={{ maxWidth: "400px"}}>
          <SignUp/>
        </div>
        
      </Container>
    </AuthProvider>
  )
}

export default App;

这是我将它们从字符串转换为日期时间的方法:

df = pd.DataFrame(np.array([[10, "2021-06-13 12:08:52.311 UTC", "2021-03-29 12:44:33.468"], 
                            [36, "2019-12-07 12:18:02.311 UTC", "2011-10-15 10:14:32.118"]
                           ]),
                   columns=['col1', 'date1', 'date2'])
df

返回:

df["date1"]= pd.to_datetime(df["date1"])
df["date2"]= pd.to_datetime(df["date2"])

在某些时候,我需要比较这两个日期以查找相同的值。为此,我需要将它们以相同的格式写入相同的位数。这说, 如何从 date1 中删除时区,使其与 date2 中的格式相同?

col1 date1 date2 0 10 2021-06-13 12:08:52.311000+00:00 2021-03-29 12:44:33.468 1 36 2019-12-07 12:18:02.311000+00:00 2011-10-15 10:14:32.118 作为 utc=None 中的默认值,因此不起作用...

我假设两个日期都是 UTC。在原始数据中,这些是不同数据集的一部分,这就是它们具有不同格式的原因。

1 个答案:

答案 0 :(得分:1)

您可以执行以下两种操作之一:

df["date1"]= pd.to_datetime(df["date1"], format="%Y-%m-%d %H:%M:%S.%f UTC")
df["date2"]= pd.to_datetime(df["date2"], format="%Y-%m-%d %H:%M:%S.%f")
>>> df
  col1                   date1                   date2
0   10 2021-06-13 12:08:52.311 2021-03-29 12:44:33.468
1   36 2019-12-07 12:18:02.311 2011-10-15 10:14:32.118

或者:

df["date1"]= pd.to_datetime(df["date1"].str.replace(" UTC", ""))
df["date2"]= pd.to_datetime(df["date2"])
>>> df
 col1                   date1                   date2
0   10 2021-06-13 12:08:52.311 2021-03-29 12:44:33.468
1   36 2019-12-07 12:18:02.311 2011-10-15 10:14:32.118