首页 > 解决方案 > python中的日期/时间多行转换问题

问题描述

我正在玩一个允许我将数据导出到 csv 的统计程序。我遇到的问题是数据以我不知道如何转换为正常日期时间格式以进行分析的格式提供。

输入文件在使用 pandas 的 read_csv 加载后提供以下形式的数据:

index   data            count 
1       11/15/20        nan   
2       16:43:23.2411   1     
3       11/14/20        nan   
4       18:53:33.124    1     
5       4:33:12.451     -1    
6       1:18:53.121     1    

有人可以帮助我将数据重新排列为更传统的日期时间格式,例如:

index   datetime                     count 
1       11/15/20 16:43:23.2411       1   
2       11/14/20 18:53:33.124        1
3       11/14/20 4:33:12.451         -1
4       11/14/20 1:18:53.121         1

我发现我认为唯一有用的是 pandas unstack 函数,但这并没有按预期工作。

data_timestamps = pd.read_csv("load_datetime.csv") 
t = data_timestamps.unstack(level=0) 

也许我没有正确使用它。尽管如此,关于如何最好地转换它的任何想法?

标签: pythonpandas

解决方案


设置工作,注意这count是一个函数,所以避免这个名字是一件好事。

import pandas as pd
import numpy as np
datain = { 'index' : [1,2,3,4,5,6], 'data': ['11/15/20', '16:43:23.2411', '11/14/20 ', '18:53:33.124', '4:33:12.451', '1:18:53.121'], 'value' : [np.nan, 1,np.nan, 1 , -1,1]}
df = pd.DataFrame(datain)

这给了我们

    index   data            value
0   1       11/15/20        NaN
1   2       16:43:23.2411   1.0
2   3       11/14/20        NaN
3   4       18:53:33.124    1.0
4   5       4:33:12.451     -1.0
5   6       1:18:53.121     1.0

做这项工作

df['date'] = np.where(df['value'].shift(1).isna(), df.data.shift(1), None)
df['date'] = df['date'].ffill()
df= df[~(df['value'].isna())]

所以在出现Nan时用数据的前一个值填写值然后填写日期然后删除所有具有NaN值行的内容给我们

        index   data            value   date
1       2       16:43:23.2411   1.0     11/15/20
3       4       18:53:33.124    1.0     11/14/20
4       5       4:33:12.451     -1.0    11/14/20
5       6       1:18:53.121     1.0     11/14/20

您需要做的就是结合日期和数据并将其放入日期时间。


推荐阅读