如何在 python 中使用 matplotlib 和 pandas 绘制 CSV 数据
Posted
技术标签:
【中文标题】如何在 python 中使用 matplotlib 和 pandas 绘制 CSV 数据【英文标题】:How to plot CSV data using matplotlib and pandas in python 【发布时间】:2017-07-11 09:19:15 【问题描述】:我有一个 python 代码,其中我使用 pandas 读取了一个 csv 文件,并将日期和时间存储在 Datetime 列中。现在我想在 y 轴上绘制传感器值,在 x 轴上绘制数据时间。我怎样才能做到这一点?我的代码如下:
import pandas as pd
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)
这是数据集中的一些行:
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
【问题讨论】:
【参考方案1】:为了让这段代码在我当前使用 Python 2.7.16 编码的机器(MacOS 10.14)上工作,我需要声明标题所在的 CSV 文件的行。所以这是 read_csv 部分中的 header=1
,正如官方 pandas read_csv 页面 here 所推荐的那样。
我的代码如下:
import pandas as pd
from datetime import datetime
import csv
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
headers = ['sensor_data','Date']
df = pd.read_csv('output.csv',header=1,names=headers)
df['Date']= pd.to_datetime(df['Date'], format='%Y-%m-%d %H:%M:%S')
df['Date']= df['Date'].map(lambda x: datetime.strptime(str(x), '%Y-%m-%d %H:%M:%S'))
x = df['Date']
print(x)
y = df['sensor_data']
# plot
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()
【讨论】:
这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review【参考方案2】:更新了 Python 3.9 的解决方案,日期格式为“2022-01-11 23:57”:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('data.csv')
df['DATE'] = pd.to_datetime(df['DATE'], format='%m/%d/%Y %H:%M')
x = df['DATE']
y = df['Sensor Value']
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()
【讨论】:
【参考方案3】:确保您的日期列是日期时间格式并在 matplotlib 中使用 plot() 函数。您可以执行类似于this 的操作。这里 x 值将是您的日期列,y 值将是传感器值。
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',names=headers)
print (df)
df['Date'] = df['Date'].map(lambda x: datetime.strptime(str(x), '%Y/%m/%d %H:%M:%S.%f'))
x = df['Date']
y = df['Sensor Value']
# plot
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()
【讨论】:
当我运行程序时,它会给出 ValueError: could not convert string to float: ' 2017/02/17 19:49:27.550'。我该如何解决这个问题? 您的日期列不是日期时间格式。您可以在为 x 赋值之前使用 -df['Date'] = pd.to_datetime(df['Date'], format='%Y/%m/%d %H:%M:%S.%f)'
感谢您的评论。现在它给了我错误:ValueError: time data '2017/02/17 19:06:17.188' doesn't match format specified。这里可能是什么问题?格式与从 csv 获取的格式相同。
您能在问题中发布几行数据集吗?有人可以快速回答问题。
我已经编辑了答案。日期列中日期和时间之间的空格数似乎存在问题。根据您的要求更改 lambda 表达式。我还添加了一种导入日期时间包的方法。以上是关于如何在 python 中使用 matplotlib 和 pandas 绘制 CSV 数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 matplotlib 在 python 中绘制 3D 密度图
我如何(在 Python 中)通过使用 blitting 从绘图中删除 matplotlib 艺术家?
python - 如何在python中使用matplotlib为重叠图添加两个不同的标签?
如何在Python中快速画图——使用Jupyter notebook的魔法函数(magic function)matplotlib inline