Python 时间数据与格式不匹配。。。尽管如此

Python 时间数据与格式不匹配。。。尽管如此,python,pandas,datetime,Python,Pandas,Datetime,我是Python和编程新手,希望能在一个小问题上得到帮助!我有一个CSV文件,其中有三列数据我想打印:第一列是日期,我想打印为我的x轴;第二列和第三列保存与这些日期对应的数据 我想画出这些数据。我已经编写了一个脚本,该脚本应该读取CSV文件,将日期列值从字符串数据转换为时间戳,然后根据时间戳绘制其他列的值以生成时间序列 当我尝试运行脚本时,它返回错误消息: ValueError:时间数据“日期”与格式“%d/%m/%y”不匹配 但是,当打开我的CSV文件时,所有日期值都以31/01/16等格式存

我是Python和编程新手,希望能在一个小问题上得到帮助!我有一个CSV文件,其中有三列数据我想打印:第一列是日期,我想打印为我的x轴;第二列和第三列保存与这些日期对应的数据

我想画出这些数据。我已经编写了一个脚本,该脚本应该读取CSV文件,将日期列值从字符串数据转换为时间戳,然后根据时间戳绘制其他列的值以生成时间序列

当我尝试运行脚本时,它返回错误消息:

ValueError:时间数据“日期”与格式“%d/%m/%y”不匹配

但是,当打开我的CSV文件时,所有日期值都以31/01/16等格式存储,这似乎与我在Python中指定的格式相匹配

我在下面分享我的脚本,以获得任何可能的帮助。提前谢谢

import numpy as np
import pandas as pd
import datetime
import matplotlib.pyplot as plt
from matplotlib.pyplot import style
style.use('ggplot')

df = pd.read_csv('Fuego_mirova_vs_rsam.csv', delimiter=',')
np.shape(df)

dates=['Date']
vrp=['VRP (Watt)']
rsam=['rsam']

for indexr, row in df.iterrows():
    dates.append(row.values[0])
    vrp.append(row.values[1])
    rsam.append(row.values[2])

FMT = '%d/%m/%y'
dtlist = []

for i in range(0, len(dates)):
    dtlist.append(datetime.datetime.strptime(dates[i], FMT))

fig, ax = plt.subplots(figsize = (10,10))

ax.plot(dtlist, vrp, label='Radiative power [W]')
ax.plot(dtlist, rsam, label='Average daily seismic amplitude')

plt.legend
plt.show()

您可以将整个
date
列转换为
datetime
对象

df[0] = pd.to_datetime(df[0])

这样,您根本不需要调用
strtime
pandas
应该能够确定日期格式是什么

您的列中有引发错误的字符串值
'date'

考虑数据帧
df

import pandas as pd
from io import StringIO

txt = """Date,value
31/01/16,1
31/01/16,1
Date,1
31/01/16,1
31/01/16,1"""

df = pd.read_csv(StringIO(txt))
df

       Date  value
0  31/01/16      1
1  31/01/16      1
2      Date      1
3  31/01/16      1
4  31/01/16      1
如果我尝试将其转换为
时间戳

df.Data = pd.to_datetime(df.Date, format='%d/%m/%y')
您可以修复数据,也可以使用
errors
参数将数据转换为
NaT
(不是时间戳)

df.Date = pd.to_datetime(df.Date, format='%d/%m/%y', errors='coerce')
df

        Date  value
0 2016-01-31      1
1 2016-01-31      1
2        NaT      1
3 2016-01-31      1
4 2016-01-31      1

您可以使用字符串将实际字符串
Date
解析为日期。旁注:matplotlib可以使用
pandas.Series
,因此您可以只对列表中的i使用
ax.plot(df[],df[]
;而不是对范围内的i使用
(len(list)):使用(list[i])
您可以对列表中的i使用
:用(i)做某事
。如果您想在
数据帧中的整个
系列
上应用函数,您可以使用“谢谢”,这正是它。很高兴知道!这听起来非常有效。我尝试在代码中实现它,但它返回错误“KeyError:0”。熊猫似乎正在尝试将字符串转换为尚不存在的列表中的日期时间?
0
指的是
pd.to_datetime(df[0])中的列名
-熊猫抱怨在
df
中找不到名为
0
的列。您需要用第一列的名称替换
0
df.Date = pd.to_datetime(df.Date, format='%d/%m/%y', errors='coerce')
df

        Date  value
0 2016-01-31      1
1 2016-01-31      1
2        NaT      1
3 2016-01-31      1
4 2016-01-31      1