2017-02-21 24 views
2

У меня есть программа python, в которой я читаю файл csv на кадре данных Pandas. Затем я хочу построить значение моего датчика с datetime в чистом формате. Мой код дает ошибку ValueError: данные времени '2017/02/17' не соответствует формату '% Y /% m /% d% H:% M:% S.% f. Мой код и некоторые строки из dataframe ниже:Построение даты и времени с использованием Pandas

Код:

import pandas as pd 
    from datetime import datetime 
    import csv 
    import matplotlib.pyplot as plt 
    import matplotlib.dates as mdates 
    headers = ['Sensor Value','Date','Time'] 
    df = pd.read_csv('C:/Users\Lala Rushan\Downloads\DataLog.CSV', parse_dates= {'Datetime': [1,2]},names=headers) 

    print (df) 

    df['Datetime'] = df['Datetime'].map(lambda x: datetime.strptime(str(x), "%y/%m/%d , %H:%M:%S.%f")) 
    #datetime.strptime(df['Datetime'],"%Y/%m/%d %H:%M:%S.%f") 
    x = df['Datetime'] 
    y = df['Sensor Value'] 

    # plot 
    plt.plot(x,y) 
    # beautify the x-labels 
    plt.gcf().autofmt_xdate() 

    plt.show() 

DataFrame:

     Datetime Sensor Value 
0  2017/02/17 19:06:17.188    2 
1  2017/02/17 19:06:22.360   72 
2  2017/02/17 19:06:27.348   72 
3  2017/02/17 19:06:32.482   72 
4  2017/02/17 19:06:37.515   74 
5  2017/02/17 19:06:42.580   70 
6  2017/02/17 19:06:47.660   72 

Как я могу решить эту ошибку? Я новичок на python, поэтому прошу прощения за любые основные ошибки.

+0

Это говорит вам, что ваша дата не соответствует строке формата. Вопрос заключается в том, почему ошибка говорит о том, что строка даты «2017/02/17» «но ваш размещенный фреймворк выглядит как« 2017/02/17 19: 06: 17.188 »(также не отмечайте запятую) или аналогичный. –

+0

Да, это то, о чем я думаю и застрял. можете ли вы изменить код для работы? Я новичок в python. – rushan

+0

Просто используйте парсер datetime 'pandas':' df ['Datetime'] = pd.to_datetime (df ['Datetime']) 'вместо того, чтобы пытаться использовать' map' для анализа каждого значения строки. Это должно анализировать все поле в 'datetime', если формат согласован во всем. – Abdou

ответ

2

Вам не нужно разделять дату и время. Ниже код работает хорошо для меня.

import pandas as pd 
from datetime import datetime 
import csv 
import matplotlib.pyplot as plt 

df = pd.read_csv('test.txt') 
print (df) 

df['Datetime'] = df['Datetime'].map(lambda x: datetime.strptime(str(x), "%Y/%m/%d %H:%M:%S.%f")) 

x = df['Datetime'] 
y = df['Sensor Value'] 

# plot 
plt.plot(x,y) 

# beautify the x-labels 
plt.gcf().autofmt_xdate() 
plt.show() 

enter image description here

+0

этот код дает мне такую ​​же ошибку. возможно, это разница в ** read_csv **, где я анализирую дату и время в одном столбце. вы думаете, что там может быть проблема? – rushan

+0

Как мы можем изменить код, чтобы часть за секунды не отображалась (все эти нули). Кроме того, как мы можем показать это до минут, скажем так? – ilyas