如何绘制CSV数据

13
我有一个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
3个回答

27

确保您的日期列是日期时间格式,并使用Matplotlib中的plot()函数。您可以执行类似于此操作。这里的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'”的错误。我该如何解决? - rushan
2
你的日期列不是datetime格式。在给x赋值之前,可以使用以下代码 - df['Date'] = pd.to_datetime(df['Date'], format='%Y/%m/%d %H:%M:%S.%f)' - Rohan
感谢您的评论。现在出现了错误:ValueError: time data ' 2017/02/17 19:06:17.188' doesn't match format specified。这里可能有什么问题?格式与从CSV中获取的格式完全相同。 - rushan
1
你能在问题中发布一些数据集的行吗?这样就有人可以快速回答问题了。 - Rohan
我已经编辑了答案。 Date列中的日期和时间之间似乎存在空格问题。 根据您的要求更改lambda表达式。我还添加了一种导入datetime包的方法。 - Rohan
@rushan 如果您发现答案正确,请将该问题标记为已回答。 - Rohan

1

针对 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()

0
为了让这段代码在我当前编写的机器上(MacOS 10.14)使用Python 2.7.16,我需要声明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()


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Register Sole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接