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 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()
我正在尝试从一个 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 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()