python - pd.to_datetime 或解析日期时间不适用于我的 csv 文件(格式 : dd/mm/yyyy, hh:mm:ss)

标签 python csv datetime pandas

我从我的 csv 文件中提取了下表

Date,Time,CO2(ppm),CellTemp(c),CellPres(kPa)  
10/08/2016,13:21:11,356.89,51.07,99.91  
10/08/2016,13:21:12,356.89,51.07,99.91  
10/08/2016,13:21:13,356.83,51.07,99.91

我研究了最近几天并尝试了不同的方法让 pandas 将 DateTime 列读取为 datetime,但我只是做不到。以下是我尝试过的一些方法:

df = pd.read_csv(myfile)
print(df.dtypes)

我得到:

Date             object  
Time             object  
CO2(ppm)         object  
CellTemp(c)      object  
CellPres(kPa)    object  
dtype: object

当我尝试时:

df_2 = pd.read_csv(file, parse_dates=[['Date', 'Time']]) 
print(df_2.dtypes)

我明白了

Date_Time        object  
CO2(ppm)         object  
CellTemp(c)      object  
CellPres(kPa)    object  
dtype: object

所以,现在 DateTime 在一列中 (11/08/2016 14:06:18)(我想要的),但未识别为 datetime

当我尝试时:

pd.to_datetime(df_2['Date_Time'], format='%d/%m/%Y %H:%M:%S)

我收到错误信息:

File "<ipython-input-31-ace4ed1a0aa9>", line 1
pd.to_datetime(df_2['Date_Time'],format='%d/%m/%Y %H:%M:%S                                                            
SyntaxError: EOL while scanning string literal

当我尝试时:

import dateutil.parser
dateutil.parser.parse(df_2['Date_Time'])

我得到(除了一些其他输出)错误信息:

AttributeError: 'Series' object has no attribute 'read'

我还在 Excel 中手动将日期格式更改为 yyyy-mm-dd 并尝试了相同的操作但没有任何更好的结果。我有点认为这一定是我犯的一个非常基本的错误,我是脚本编写的新手,希望得到任何帮助。如果我的问题有格式错误,请道歉我真的试过了。

最佳答案

看起来有一些错误的日期时间或某些值无法转换为日期时间,因此您可以在to_datetime中添加参数errors='coerce'将它们转换为 NaT:

#31.11. does not exist
print (df_2)
             Date_Time  CO2(ppm)  CellTemp(c)  CellPres(kPa)  
0  10/08/2016 13:21:11    356.89        51.07            99.91
1  10/08/2016 13:21:12    356.89        51.07            99.91
2  31/11/2016 13:21:13    356.83        51.07            99.91

df_2['Date_Time'] = pd.to_datetime(df_2['Date_Time'],
                                   format='%d/%m/%Y %H:%M:%S',
                                   errors='coerce')
print (df_2)
            Date_Time  CO2(ppm)  CellTemp(c)  CellPres(kPa)  
0 2016-08-10 13:21:11    356.89        51.07            99.91
1 2016-08-10 13:21:12    356.89        51.07            99.91
2                 NaT    356.83        51.07            99.91

您还可以通过以下方式检查所有有问题的值:

print (df_2[pd.to_datetime(df_2['Date_Time'],format='%d/%m/%Y %H:%M:%S', errors='coerce').isnull()])
             Date_Time  CO2(ppm)  CellTemp(c)  CellPres(kPa)  
2  31/11/2016 13:21:13    356.83        51.07            99.91

关于python - pd.to_datetime 或解析日期时间不适用于我的 csv 文件(格式 : dd/mm/yyyy, hh:mm:ss),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38968811/

相关文章:

Python 日期时间库,在向日期时间添加天数时可以识别夏令时

python - pandas groupby 中连续日期之间的差异

python - 被告知我的代码有太多 "if"语句

python - 用python在网站文章中搜索关键词

python - 将 CHANGING OrderedDict 输出为 CSV

linux - CentOS 从 CSV 文件脚本创建用户

sql - liquibase 在插入 sql 语句的 csv 行的所有值周围加上单引号

c# - 日期时间并不总是得到设置

Python 检查对象是 ListProxy 还是 DictProxy

python - Numpy:二维数组,删除奇数索引并保持相同的数组格式