【问题标题】:How do I combine two columns of date and time in a csv file to 1 datetime column in pandas?如何将 csv 文件中的两列日期和时间合并到 pandas 中的 1 个日期时间列?
【发布时间】:2016-07-28 05:05:38
【问题描述】:

我得到了一个格式如下的 csv 文件:

日期;时间;DD;FH;FF;FX;T;
20110101;1;240;30;30;40;15;
20110101;2;250;30;40;60;18;
20110101;3;250;40;40;70;21;
20110101;4;250;40;30;60;20;
20110101;5;250;40;40;60;21;

我想要一个将日期和时间列组合为 1 个日期时间的 pandas 数据框。 我尝试了以下代码:

deelen = pandas.read_csv('Deelen2.csv', parse_dates = [[0,1]], header = 0,   index_col = 0, delimiter=';', low_memory=False)

我得到以下输出:

>>> deelen.head()
          DD     FH     FF     FX      T    
date_time                                                                  
20110101 1   240     30     30     40     15             
20110101 2   250     30     40     60     18            
20110101 3   250     40     40     70     21             
20110101 4   250     40     30     60     20           
20110101 5   250     40     40     60     21 

所以日期和时间组合在 1 列中,但它不是日期时间。

我也试过了:

>>> deelen = pandas.read_csv('Deelen2.csv', parse_dates = {'datetime' : [0,1]}, header = 0, index_col = ['datetime'], delimiter=';')

但这给出了类似的输出:

           DD     FH     FF     FX      T    
datetime                                                                   
20110101 1   240     30     30     40     15            
20110101 2   250     30     40     60     18               
20110101 3   250     40     40     70     21             
20110101 4   250     40     30     60     20           
20110101 5   250     40     40     60     21 

由于某种原因,它不起作用.. 我正在使用 Python 2.7 和 pandas 0.18.0

提前感谢您的帮助

【问题讨论】:

  • 失败的原因是你的时间列不明确,这里的时间代表什么?小时,分钟,秒..?
  • 时间列以小时为单位。 24 小时后日期变为 20110102 等

标签: python csv datetime pandas


【解决方案1】:

确定以下工作:

In [140]:
import io
import pandas as pd
t="""date;time;DD;FH;FF;FX;T;
20110101;1;240;30;30;40;15;
20110101;2;250;30;40;60;18;
20110101;3;250;40;40;70;21;
20110101;4;250;40;30;60;20;
20110101;5;250;40;40;60;21;"""
df = pd.read_csv(io.StringIO(t), sep=';', dtype=({'date':str}))
df['date_time'] = pd.to_datetime(df['date']) + pd.TimedeltaIndex(df['time'], unit='H')
df

Out[140]:
       date  time   DD  FH  FF  FX   T  Unnamed: 7           date_time
0  20110101     1  240  30  30  40  15         NaN 2011-01-01 01:00:00
1  20110101     2  250  30  40  60  18         NaN 2011-01-01 02:00:00
2  20110101     3  250  40  40  70  21         NaN 2011-01-01 03:00:00
3  20110101     4  250  40  30  60  20         NaN 2011-01-01 04:00:00
4  20110101     5  250  40  40  60  21         NaN 2011-01-01 05:00:00

在这里,我将date 列的dtype 指定为str,然后我将其转换并从您的时间列构造一个TimedeltaIndex,并将其添加到to_datetime 的结果中

【讨论】:

  • 你能否解释一下为什么我的方法行不通?
  • 你的方法不起作用,因为201101011不能被模棱两可地解析,如果它只是20111001那么我们可以假设格式只是%Y%m%d但是1添加到这个没有意义
猜你喜欢
  • 1970-01-01
  • 2013-11-29
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 2018-06-17
  • 1970-01-01
  • 2023-02-07
相关资源
最近更新 更多