在熊猫中解析日期

时间:2018-05-15 11:48:38

标签: python pandas

所以我需要读取一个包含日期和数值的csv文件,其格式如下: Try This code: <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#131314" android:elevation="4dp" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal" > <Button android:id="@+id/btn_camera" android:layout_width="0dp" android:layout_weight="1" android:layout_height="24dp" android:background="@drawable/ic_default_event_pic" /> <Button android:id="@+id/btn_ruler" android:layout_width="0dp" android:layout_weight="1" android:layout_height="24dp" android:background="@drawable/ic_default_event_pic"/> <Button android:id="@+id/btn_3" android:layout_width="0dp" android:layout_weight="1" android:layout_height="24dp" android:background="@drawable/ic_default_event_pic"/> <Button android:id="@+id/btn_price" android:layout_width="0dp" android:layout_weight="1" android:layout_height="24dp" android:background="@drawable/ic_default_event_pic" /> <Button android:id="@+id/btn_5" android:layout_width="0dp" android:layout_weight="1" android:layout_height="24dp" android:background="@drawable/ic_default_event_pic" /> </LinearLayout> </android.support.v7.widget.Toolbar> Or <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#131314" android:elevation="4dp" > <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/relativeLayout" > <Button android:id="@+id/btn_camera" android:layout_width="24dp" android:layout_height="24dp" android:layout_marginStart="50dp" android:background="@drawable/ic_default_event_pic" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" /> <Button android:id="@+id/btn_ruler" android:layout_width="24dp" android:layout_height="24dp" android:background="@drawable/ic_default_event_pic" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toEndOf="@id/btn_camera"/> <Button android:id="@+id/btn_3" android:layout_width="24dp" android:layout_height="24dp" android:background="@drawable/ic_default_event_pic" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toEndOf="@id/btn_ruler" /> <Button android:id="@+id/btn_price" android:layout_width="24dp" android:layout_height="24dp" android:background="@drawable/ic_default_event_pic" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toEndOf="@id/btn_3" /> <Button android:id="@+id/btn_5" android:layout_width="24dp" android:layout_height="24dp" android:layout_marginEnd="50dp" android:background="@drawable/ic_default_event_pic" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toEndOf="@id/btn_price" /> </android.support.constraint.ConstraintLayout> </android.support.v7.widget.Toolbar>

这是我的代码:

2017-01-01 00:00:00,-350.7866656

我得到的是一个错误:def parser(x): return datetime.strptime(x, '%Y-%m-%d %H:%M:%S') df = read_csv('filename', header=None, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser) print(df.head()) 据我所知,程序将字符串视为单列而不是两列,并尝试解析整个字符串而不是第一列与日期。我如何解决这个问题,以便将csv文件读入两列?

2 个答案:

答案 0 :(得分:3)

在我看来,问题是您可能有一些错误的日期值,无法通过单个datetime格式进行解析。而是向try-except函数添加parser语句:

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

temp=u"""2015-01-04 12:04:10,10
2018-01-10 18:40:12,20
-350.7866656,20"""

def parser(x): 
    try:                                                                                                        
        return datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
    except ValueError:
        return np.nan

#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp),  header=None, parse_dates=[0], index_col=0, 
squeeze=True, date_parser=parser)

print (df)
0
2015-01-04 12:04:10    10
2018-01-10 18:40:12    20
NaT                    20
Name: 1, dtype: int64

print (df.index)
DatetimeIndex(['2015-01-04 12:04:10', '2018-01-10 18:40:12', 'NaT'], dtype='datetime64[ns]', name=0, freq=None)

答案 1 :(得分:0)

我查了pandas.read_csv文档。您设置为index_col的参数0正在将文件中的日期列设置为索引。在我看来,删除参数将产生所需的结果,即。在两列中阅读CSV。

干杯!