从 CSV 文件解析 Pandas 日期

Pandas date parsing from CSV file

提问人:fred 提问时间:3/5/2023 最后编辑:fred 更新时间:3/5/2023 访问量:148

问:

我有一个csv文件:

year;month;day;hour;min;sec;temperature
2022;10;27;13;36;42;5.835
2022;10;27;14;36;42;6.435
2022;10;27;15;36;42;6.335
2022;10;27;16;36;42;6.435

我想从中绘制一个简单的图表。我无法组合单独的日期时间部分。这是我的代码:

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

def parser(year, month, day, hour, minute, second):
    return pd.to_datetime(day + '.' + month + '.' + year + ' ' + hour + ':' + minute + ':' + second

df = pd.read_csv('temp_data.csv',sep=';',parse_dates={'datetime':['year', 'month', 'day', 'hour', 'min', 'sec']}, date_parser=parser,index_col=0)

time = df['datetime'].values
temp = df['temperature'].values

plt.plot(time, temp)
python pandas matplotlib datetime 日期解析

评论

1赞 Corralien 3/5/2023
请注意,它不能像索引而不是列那样工作。time = df['datetime'].values"datetime
1赞 FObersteiner 3/5/2023
另请参阅 如何将数据框中的多个列合并到 Pandas 日期时间

答:

1赞 Corralien 3/5/2023 #1

更新

我希望 x 轴日期格式为:27.10.22

您必须手动格式化。

只需使用 df.plot

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# df = pd.read_csv(...)

ax = df.plot()
loc = mdates.DayLocator()
fmt = mdates.DateFormatter('%d.%m.%y')
ax.xaxis.set_major_locator(loc)
ax.xaxis.set_major_formatter(fmt)
plt.show()

输出:

enter image description here

评论

0赞 fred 3/5/2023
谢谢,我也得到了图表,但不幸的是无法获得正确的 x 轴日期。恳请看图片:链接
0赞 fred 3/5/2023
我希望 x 轴日期格式为:27.10.22
0赞 fred 3/5/2023
谢谢!x 轴格式是正确的,但数字是错误的。我认为问题出在功能上:parse_dates。熊猫知道吗,例如,“第二”意味着它是准时的一部分......这是图片:链接
0赞 fred 3/5/2023
还尝试过:ax = df.plot(x='datetime',y='tempc')
0赞 fred 3/5/2023
如果我在控制台中编写:df.info(),它说日期时间类型是“对象”,但应该是“datetime[ns]”
1赞 sergenp 3/5/2023 #2

我无法使用 python 3.11 让您的代码在我的电脑上运行

df = pd.read_csv(
    "temp_data.csv",
    sep=";",
    parse_dates={"datetime": ["year", "month", "day", "hour", "min", "sec"]},
    date_parser=parser,
    # index_col=0, this line was causing the problem
)

我的情节不会显示得那么好,所以我也必须这样做:

plt.plot(time, temp)
plt.show(block=True)