如何在python中将不规则的datetime转换为总秒数

如何在python中将不规则的datetime转换为总秒数,python,pandas,datetime,dataframe,timedelta,Python,Pandas,Datetime,Dataframe,Timedelta,我有一列持续时间,但值不同。有些持续时间只是时间格式,有些与日期混合。我想要以总秒为单位的持续时间列。我尝试使用to_datetime和parse_date方法将列转换为,但无法工作。如何在熊猫身上做到这一点?以下是专栏: 一种方法是使用pd.Series。使用try/应用,除了子句,该子句按顺序尝试每个方法 此方法的好处是,它将接受timedelta和datetime的各种潜在输入 import pandas as pd, numpy as np df = pd.DataFrame({'M

我有一列持续时间,但值不同。有些持续时间只是时间格式,有些与日期混合。我想要以总秒为单位的持续时间列。我尝试使用to_datetime和parse_date方法将列转换为,但无法工作。如何在熊猫身上做到这一点?以下是专栏:


一种方法是使用
pd.Series。使用
try
/
应用
,除了
子句,该子句按顺序尝试每个方法

此方法的好处是,它将接受
timedelta
datetime
的各种潜在输入

import pandas as pd, numpy as np

df = pd.DataFrame({'Mixed': ['03:59:49', '1904-01-01 04:06:08']})

def return_seconds(x):
    try:
        return pd.to_timedelta(x).total_seconds()
    except:
        try:
            dt = pd.to_datetime(x)
            return (dt - dt.normalize()).total_seconds()
        except:
            return np.nan

df['TotalSeconds'] = df['Mixed'].apply(return_seconds).astype(int)

print(df)

#                  Mixed  TotalSeconds
# 0             03:59:49         14389
# 1  1904-01-01 04:06:08         14768

过滤最后8个值,转换后使用:

编辑:

使用正则表达式:

import pandas as pd
df = pd.DataFrame({"a": ["03:59:49", "04:59:49", "1904-01-01 05:59:49", "1904-01-01 06:59:49"]})
df["TotalSeconds"]  = pd.to_timedelta(df["a"].str.extract('(\d{2}:\d{2}:\d{2})')).dt.total_seconds()
print(df)
输出:

                     a  TotalSeconds
0             03:59:49       14389.0
1             04:59:49       17989.0
2  1904-01-01 05:59:49       21589.0
3  1904-01-01 06:59:49       25189.0

“但它不能工作……”。显示不起作用的代码。欢迎使用StackOverflow。请花点时间阅读这篇文章,以及如何提供答案,并相应地修改你的问题。这些提示可能也很有用。谢谢Rakesh,它很有效。但是有一些NaN值,如何删除或将其转换为0。您可以使用
df.fillna(0)
Ex:
pd.to_timedelta(df[“a”].str.extract('(\d{2}:\d{2}:\d{2}:\d{2})).dt total_seconds().fillna(0)
当我将原始熊猫系列作为数据帧'data['duration duration pd'=pd.to_timedelta(data['Finish u Netto'.]str 8).dt.total_seconds().astype(int)然后将错误显示为“ValueError:expected hh:mm:ss format”@MAK-似乎存在其他格式的数据,因此请检查编辑的答案。数据是数据帧,列类型是object。现在它给出了另一个错误:“TypeError:不能转换为datetime”
import pandas as pd
df = pd.DataFrame({"a": ["03:59:49", "04:59:49", "1904-01-01 05:59:49", "1904-01-01 06:59:49"]})
df["TotalSeconds"]  = pd.to_timedelta(df["a"].str.extract('(\d{2}:\d{2}:\d{2})')).dt.total_seconds()
print(df)
                     a  TotalSeconds
0             03:59:49       14389.0
1             04:59:49       17989.0
2  1904-01-01 05:59:49       21589.0
3  1904-01-01 06:59:49       25189.0