【问题标题】:How to read specific date and time for specific values in csv file using python如何使用python读取csv文件中特定值的特定日期和时间
【发布时间】:2020-01-16 22:26:45
【问题描述】:

这里我有一个包含日期、时间和一个输入的数据集。在这里,我想一起读取特定值的日期和时间。这里我想保持 csv 文件的长度不变。

这里 5 个值包含时间转换 00:00:00。

在这里我使用了一些代码,但它给了我 0 天。首先,我将该特定时间转换为00:00:00

data['date_time']= pd.to_datetime(data['date'] + " " + data['time'],
                        format='%d/%m/%Y %H:%M:%S', dayfirst=True)

data['duration'] = np.where(data['X3'].eq(5), np.timedelta64(0), pd.to_timedelta(data['date_time']))


print(data['duration'])


def f(x):
ts = x.total_seconds()
hours, remainder = divmod(ts, 3600)
minutes, seconds = divmod(remainder, 60)
return ('{:02d}:{:02d}:{:02d}').format(int(hours), int(minutes), int(seconds)) 

data['duration'] = data['duration'].apply(f)

输出:

5      00:00:00
11     00:00:00
18     00:00:00
25     00:00:00
30     00:00:00
37     00:00:00
43     00:00:00
46     00:00:00
54     00:00:00
60     00:00:00
65     00:00:00
70     00:00:00
80     00:00:00
82     00:00:00
89     00:00:00
95     00:00:00
99     00:00:00
104    00:00:00
111    00:00:00
114    00:00:00
121    00:00:00

但我期望的输出是:

    datetime	              x3
10/3/2018 6:15:00     	7
10/3/2018 00:00:00     	5
10/3/2018 7:45:00     	7
10/3/2018 9:00:00     	7
10/3/2018 9:25:00     	7
10/3/2018 00:00:00     	5
10/3/2018 11:00:00    	7
10/3/2018 11:30:00    	7
10/3/2018 13:30:00    	7
10/3/2018 00:00:00    	5
10/3/2018 15:00:00    	7
10/3/2018 15:25:00    	7
10/3/2018 16:25:00    	7
10/3/2018 00:00:00    	5
10/3/2018 19:00:00    	7
10/3/2018 19:30:00    	7

表示将时间替换为 00:00:00

date	time	x3	              T		                 x3
10/3/2018	6:15:00	7	10/3/2018 6:15:00		7
10/3/2018	6:45:00	5	10/3/2018 0:00:00		5
10/3/2018	7:45:00	7	10/3/2018 7:45:00		7
10/3/2018	9:00:00	7	10/3/2018 9:00:00	        7
10/3/2018	9:25:00	7	10/3/2018 9:25:00		7
10/3/2018	9:30:00	5	10/3/2018 0:00:00		5

我的 csv 的子集:

date	             time	x3
10/3/2018	6:15:00 	7
10/3/2018	6:45:00 	5
10/3/2018	7:45:00 	7
10/3/2018	9:00:00	        7 
10/3/2018	9:25:00   	7
10/3/2018	9:30:00	        5
10/3/2018	11:00:00	7
10/3/2018	11:30:00	7
10/3/2018	13:30:00	7
10/3/2018	13:50:00	5
10/3/2018	15:00:00	7
10/3/2018	15:25:00	7
10/3/2018	16:25:00	7
10/3/2018	18:00:00	5
10/3/2018	19:00:00	7
10/3/2018	19:30:00	7
10/3/2018	20:00:00	7
10/3/2018	22:05:00	7
10/3/2018	22:15:00	5
10/3/2018	23:40:00	7
10/4/2018	6:58:00	        5
10/4/2018	13:00:00	7
10/4/2018	16:00:00	7
10/4/2018	17:00:00	7
10/4/2018	18:00:00	7
10/5/2018	7:00:00	        7
10/5/2018	8:00:00  	7
10/5/2018	9:00:00	        7

My csv file

【问题讨论】:

    标签: python-3.x pandas datetime time


    【解决方案1】:

    您只能删除 date_time 列中 data['x3'].eq(5)Series.maskSeries.dt.floor 的行的天数:

    data['date_time']= pd.to_datetime(data['date'] + " " + data['time'],
                            format='%d/%m/%Y %H:%M:%S', dayfirst=True)
    
    mask = data['x3'].eq(5)
    data['date_time'] = data['date_time'].mask(mask, data['date_time'].dt.floor('d'))
    

    print (data)
             date      time  x3           date_time
    0   10/3/2018   6:15:00   7 2018-03-10 06:15:00
    1   10/3/2018   6:45:00   5 2018-03-10 00:00:00
    2   10/3/2018   7:45:00   7 2018-03-10 07:45:00
    3   10/3/2018   9:00:00   7 2018-03-10 09:00:00
    4   10/3/2018   9:25:00   7 2018-03-10 09:25:00
    5   10/3/2018   9:30:00   5 2018-03-10 00:00:00
    6   10/3/2018  11:00:00   7 2018-03-10 11:00:00
    7   10/3/2018  11:30:00   7 2018-03-10 11:30:00
    8   10/3/2018  13:30:00   7 2018-03-10 13:30:00
    9   10/3/2018  13:50:00   5 2018-03-10 00:00:00
    10  10/3/2018  15:00:00   7 2018-03-10 15:00:00
    11  10/3/2018  15:25:00   7 2018-03-10 15:25:00
    12  10/3/2018  16:25:00   7 2018-03-10 16:25:00
    13  10/3/2018  18:00:00   5 2018-03-10 00:00:00
    14  10/3/2018  19:00:00   7 2018-03-10 19:00:00
    15  10/3/2018  19:30:00   7 2018-03-10 19:30:00
    16  10/3/2018  20:00:00   7 2018-03-10 20:00:00
    17  10/3/2018  22:05:00   7 2018-03-10 22:05:00
    18  10/3/2018  22:15:00   5 2018-03-10 00:00:00
    19  10/3/2018  23:40:00   7 2018-03-10 23:40:00
    20  10/4/2018   6:58:00   5 2018-04-10 00:00:00
    21  10/4/2018  13:00:00   7 2018-04-10 13:00:00
    22  10/4/2018  16:00:00   7 2018-04-10 16:00:00
    23  10/4/2018  17:00:00   7 2018-04-10 17:00:00
    24  10/4/2018  18:00:00   7 2018-04-10 18:00:00
    25  10/5/2018   7:00:00   7 2018-05-10 07:00:00
    26  10/5/2018   8:00:00   7 2018-05-10 08:00:00
    27  10/5/2018   9:00:00   7 2018-05-10 09:00:00
    

    【讨论】:

    • 感谢您的回复。但是输出来了“ 10/3/2018 6:45:00 5, 10/3/2018 9:30:00 5 ”这样的。但我想将这个时间转换为“00:00:00”,保持日期格式如下。
    • @team - 所以您需要在下一步中删除时间?查看解决办法,但是没有00:00:00,因为pandas中没有显示
    • @jezrael 不不,我想要时间。干草我编辑了我的预期输出。你能看看那个输出吗?
    • @team - 现在可以测试了吗?
    • @jezrael 与之前的输出朋友相同。它没有显示为我预期的输出。
    【解决方案2】:

    T 的代码中删除duration。应该是

    T = data.loc[data['duration'] == match_time, ['date','duration','x3']]
    

    当您将duration 放在那里时,您要求Pandas 在data['duration'] == match_time 时获取duration 列。

    【讨论】:

    • 感谢您的回复。但是输出来了“ 10/3/2018 6:45:00 5, 10/3/2018 9:30:00 5 ”这样的。但我想转换这个时间“00:00:00”保持日期格式像这样
    • 没用。在这里,我编辑了我的预期输出。可以看看吗?
    猜你喜欢
    • 2015-10-25
    • 2019-02-14
    • 1970-01-01
    • 2017-07-08
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    相关资源
    最近更新 更多