【问题标题】:Python Convert Datetime from csv for matplotlibPython将日期时间从csv转换为matplotlib
【发布时间】:2017-01-30 18:42:51
【问题描述】:

我正在尝试从第 1 列作为日期时间值的 csv 文件中进行绘图,如下所示

 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

请帮忙! 谢谢

【问题讨论】:

  • 您不需要也不能将np.genfromtxt() 的结果分配给两个变量,因为在这种情况下它是单个对象ndarray。您要么必须使用x, y = *np.genfromtxt(....) 解压缩它,要么只需将其分配给 x 并绘制它。 matplotlib 可能会自行处理解包
  • 请不要在评论区回答。

标签: python csv pandas matplotlib genfromtxt


【解决方案1】:

来源: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 只返回一个数组,您将其分配给两个参数 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 选项将第一行解释为列标题。有了这个,您可以通过提供列标题非常方便地访问数据:

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

您可以使用以下代码 sn-p 实现类似的功能:

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']

【讨论】:

  • 谢谢@Sayali。那么定义 y 的最简单方法是什么?
  • 能否请您从您的 csv 文件中发布示例数据?
  • 我已经编辑了我的答案。请让我知道,如果你有任何问题。我很乐意提供帮助:)
  • 非常感谢@Sayali!这对初学者很有帮助。我将发布更正后的代码。
【解决方案2】:
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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    相关资源
    最近更新 更多