如何在 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 密度图

如何使用matplotlib在python中绘制向量

我如何(在 Python 中)通过使用 blitting 从绘图中删除 matplotlib 艺术家?

python - 如何在python中使用matplotlib为重叠图添加两个不同的标签?

如何在Python中快速画图——使用Jupyter notebook的魔法函数(magic function)matplotlib inline

如何在 python 中使用 matplotlib 和 pandas 绘制 CSV 数据