【问题标题】:for-loop over df converts datetime to intdf 上的 for 循环将 datetime 转换为 int
【发布时间】:2021-01-10 14:53:50
【问题描述】:

我有这个 df:

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

df = pd.DataFrame({"Time": ['2020-04-09 06:46:00', '2020-04-09 06:46:00', '2020-04-09 06:46:00', '2020-04-09 08:52:00', 
                            '2020-04-09 08:52:00', '2020-04-09 08:52:00', '2020-04-09 16:03:00', '2020-04-10 06:50:00', 
                            '2020-04-10 06:50:00', '2020-04-10 12:33:00', '2020-04-10 12:33:00'],
                  "ID": [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]})
    
df['Time'] = pd.to_datetime(df['Time'])
df['ID'] = pd.to_numeric(df['ID'])

输出:

                   Time ID
0   2020-04-09 06:46:00 1
1   2020-04-09 06:46:00 1
2   2020-04-09 06:46:00 1
3   2020-04-09 08:52:00 1
4   2020-04-09 08:52:00 1
5   2020-04-09 08:52:00 1
6   2020-04-09 16:03:00 2
7   2020-04-10 06:50:00 2
8   2020-04-10 06:50:00 2
9   2020-04-10 12:33:00 2
10  2020-04-10 12:33:00 2

现在我想创建一个新的df_event,列出不同的IDs 和相关的Time (min())。但是当我执行以下 for 循环时:

df_event = pd.DataFrame(columns=['ID', 'Time'])

t = df['ID'].unique()
df_event['ID']=t
for item in t:
    df_sub=df[df.ID == item]
    df_event['Time']=np.where(df_event['ID']==item,df_sub.Time.min(), df_event['Time'])
    
df_event

第一个条目输出为 int 而不是 datetime:

   ID                  Time
0   1   1586414760000000000
1   2   2020-04-09 16:03:00

如果有多个条目,问题只会出现在第一行。

【问题讨论】:

    标签: python python-3.x pandas dataframe for-loop


    【解决方案1】:

    我会通过这种方式创建 df_event 来简化您的代码:

    df_event = df.groupby("ID").min().reset_index()
    

    输出:

        ID  Time
    0   1   2020-04-09 06:46:00
    1   2   2020-04-09 16:03:00
    

    如果你想继续使用np.where(),问题似乎来自与pandas 和numpy 的类型之间的兼容性问题。 This question 可能会有所帮助。

    【讨论】:

    • 首先感谢您的回答!通过尝试使用groupby,我得到了这个错误f() takes 1 positional argument but 2 were given
    • 这很奇怪。通过执行您的第一个代码块,然后执行我给出的行,我得到了上面显示的结果。也许其他变量正在干扰。您也可以尝试删除.reset_index(),这是可选的。
    • 嗯。这很奇怪。我删除了min() 中的'Time',现在它可以工作了..
    • 是的,'Time' 没用。它必须在某些版本上引发错误。
    猜你喜欢
    • 2012-01-24
    • 2012-10-13
    • 2015-12-03
    • 2021-03-12
    • 2018-02-22
    • 2017-04-26
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多