数据

时间:2017-12-13 21:46:14

标签: python python-3.x pandas matplotlib

我有一个巨大的csv数据文件,它看起来像这样:

STAID,    SOUID,    DATE,   TX, Q_TX
   162,100522,19010101,  -31,    0
   162,100522,19010102,  -13,    0

TX是温度,数据会持续几千行来给你一个想法。

对于每年,我想绘制温度高于25度的天数。

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("klimaat.csv")

zomers = data.index[data["TX"] > 250].tolist()

x_values = []
y_values = []
plt.xlabel("Years")
plt.ylabel("Amount of days with TX > 250")
plt.title("Zomerse Dagen Per Jaar")
plt.plot(x_values, y_values)

# save plot
plt.savefig("zomerse_dagen.png")

X轴应该是1900-2010年的年份,y轴应该是当年温度高于250的天数。

我该如何解决这个问题? > _<我无法掌握如何从数据中提取天数......并在情节中使用它。

2 个答案:

答案 0 :(得分:1)

您可以单独创建数据点,使其更容易理解。然后使用pandas.pivot_table进行聚合。这是一个可以让你前进的工作示例。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("klimaat.csv", parse_dates=["DATE"])
data.sort_values("DATE", inplace=True)
data["above_250"] = data.TX > 250
data["year"] = data.apply(lambda x: x["DATE"].year, axis=1).astype("category")

plot_df = pd.pivot_table(data, index="year", values="above_250", aggfunc="sum")

years = plot_df.index
y_pos = np.arange(len(years))
values = plot_df.above_250

plt.bar(y_pos, values, align='center', alpha=0.5)
plt.xticks(y_pos, years)
plt.ylabel("Amount of days with TX > 250")
plt.xlabel("Year")
plt.title("Zomerse Dagen Per Jaar")

plt.show()

答案 1 :(得分:0)

您可以使用python标准库中的datetime模块来解析日期,特别是查看strptime函数。然后,您可以使用datetime.year属性来汇总数据。

在分别将OrderedDict.keys()OrdredDict.values()分配给x_valuesy_values之前,您还可以使用OrderedDict来跟踪汇总。