我有一个.csv文件,其中包含以以下方式显示的表:
lon lat Day1 Day2 Day3 ....
77.32 28.42 1250 850 680
77.32 28.88 786 986 760
给出一个特定的纬度值,例如lon = 77.32和lat = 28.42,我想读取一行并按以下方式重新排列:
Albedo Values
11-11-2016 1250
12-11-2016 850
13-11-2016 680
. . . . . . .
. . . . . . .
“日期”列已替换为日期列表。
背景:
我想根据这些数据进一步绘制折线图。目前,我正在尝试以下代码来绘制此数据:
#relevant imports:
import matplotlib.pyplot as plt
import pandas as pd
import statsmodels.api as sm
#specifying lat lon value range:
l=float(28.42)
l1=float(28.43)
k=float(77.32)
k1=float(77.33)
#reading the relevant row
df=pd.read_csv(path+file, index_col=['lon','lat']).query( '@k <= lon < @k1 and @l < lat <= @l1').T
print(df)
出局:
lon 77.328125
lat 28.421875
Day1 1250.250000
Day2 804.250000
Day3 750.000000
Day4 713.875000
Day5 740.650000
Day6 840.250000
Day7 844.200000
Day8 1009.000000
^这是我现在正在使用的数据框,这是一个权宜之计。
df.plot(legend=True) #plot column
plt.show()
出局:
如您所见,x轴上没有标签,并且由于我当前正在使用数据框,因此无法在x轴上添加日期。一旦获得所需的数据框,就可以解决此问题。即使您可以建议我使用此临时数据框本身在x轴上添加日期的方法,也可以解决我的问题。希望我的问题有道理。谢谢。
答案 0 :(得分:1)
我认为需要melt
,然后将列转换为datetime
:
df = df.melt(['lon','lat'], var_name='date')
df['date'] = pd.to_datetime(df['date'])
print (df)
lon lat date value
0 77.32 28.42 2016-11-11 1250
1 77.32 28.88 2016-11-11 786
2 77.32 28.42 2016-12-11 850
3 77.32 28.88 2016-12-11 986
4 77.32 28.42 2016-11-13 680
5 77.32 28.88 2016-11-13 760
df.plot(x='date', y='value', legend=True)