Python 为 matplotlib 从 csv 转换日期时间

Python Convert Datetime from csv for matplotlib

我正在尝试从一个 csv 文件中绘制,其中第 1 列作为日期时间值,如下所示

 27-08-2016 08:43   21.38329164

使用此代码:

from matplotlib import pyplot as plt
from matplotlib import style
import numpy as np
import datetime as dt
from datetime import datetime
import matplotlib.dates as mdates

style.use('ggplot')

x,y = np.genfromtxt('I112-1a.csv', unpack=True,dtype=None, delimiter = ',', converters={0: lambda x: datetime.strptime(x, '%d-%m-%Y %H:%M')})


plt.title('Panel Charge')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()

我收到这个错误:

    x,y = np.genfromtxt('I112-1a.csv', unpack=True,dtype=None, delimiter = ',', converters={0: lambda x: datetime.strptime(x, '%d-%m-%Y %H:%M')})
ValueError: too many values to unpack

请帮忙! 谢谢

来源:numpy.genfromtxt

numpy.genfromtxt  Returns:ndarray
Data read from the text file. If usemask is True, this is a masked array.

@Ev。 Kounis 在评论部分指出:numpy.genfromtxt returns 只有一个数组,您将其分配给两个参数 x 和 y。

请更新您的代码如下:

data = np.genfromtxt('I112-1a.csv', unpack=True,dtype=None, delimiter = ',', converters={0: lambda x: datetime.strptime(x, '%d-%m-%Y %H:%M')})

例如,

如果你的数据文件结构如下

col1, col2, col3
   1,    2,    3
  10,   20,   30
 100,  200,  300

然后 numpy.genfromtxt 可以使用 names=True 选项将第一行解释为第 header 列。有了这个,您可以通过提供列 header:

来非常方便地访问数据
data = np.genfromtxt('data.txt', delimiter=',', names=True)
print data['col1']    # Output: array([   1.,   10.,  100.])
print data['col2']    # Output: array([   2.,   20.,  200.])
print data['col3']    # Output: array([   3.,   30.,  300.])

因为在这种情况下数据是这样形成的

row1,   1,  10, 100
row2,   2,  20, 200
row3,   3,  30, 300

您可以使用以下代码片段实现类似的目的:

labels = np.genfromtxt('data.txt', delimiter=',', usecols=0, dtype=str)
raw_data = np.genfromtxt('data.txt', delimiter=',')[:,1:]

第一行将第一列(标签)读入字符串数组。 第二行从文件中读取所有数据但丢弃第一列。 这就是您可以提取不同变量中的列的方法。

如果你想绘制 col1 和 col2,你可以简单地定义:

x=data['col1']
y=data['col2']
from matplotlib import pyplot as plt
from matplotlib import style
import numpy as np
import datetime as dt
from datetime import datetime
import matplotlib.dates as mdates


style.use('ggplot')
data = np.genfromtxt('I112-1.csv', unpack=True,dtype=None, names=True,delimiter = ',', converters={0: lambda x: datetime.strptime(x, '%d-%m-%Y %H:%M')})
x = data['Time']
y = data['Charge']

plt.plot (x,y)                
plt.title('Panel Charge')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()