第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當我更改 python pandas dataframe 中的索引時

當我更改 python pandas dataframe 中的索引時

炎炎設(shè)計 2023-09-12 20:03:41
我有一個 S&P500 歷史價格數(shù)據(jù)集,其中包含日期、價格和其他數(shù)據(jù),但我現(xiàn)在不需要這些數(shù)據(jù)來解決我的問題。        Date      Price0     1981.01     6.191     1981.02     6.172     1981.03     6.243     1981.04     6.25.       .           .and so on till 2020日期由float年份、點和月份組成。我嘗試用 繪制所有歷史價格matplotlib.pyplot as plt。plt.plot(df["Price"].tail(100))plt.title("S&P500 Composite Historical Data")plt.xlabel("Date")plt.ylabel("Price")這就是結(jié)果。我使用它是df["Price"].tail(100)為了讓您可以更好地看到第一張圖和第二張圖之間的差異(您很快就會看到)。但后來我嘗試將索引從之前的索引(0、1、2 等)設(shè)置到df["Date"]DataFrame 中的列,以便查看 x 軸中的日期。df = df.set_index("Date")plt.plot(df["Price"].tail(100))plt.title("S&P500 Composite Historical Data")plt.xlabel("Date")plt.ylabel("Price")這就是結(jié)果,令人相當失望。我的日期應(yīng)該位于 x 軸上,但問題是該圖表與之前的圖表不同,而之前的圖表是正確的。如果您需要數(shù)據(jù)集來嘗試該問題,您可以在這里找到它。它被稱為 1871 年至今的美國股市和 CAPE 比率。希望你已經(jīng)明白了一切。提前致謝更新我發(fā)現(xiàn)了一些可能導(dǎo)致問題的東西。如果您深入查看日期,您可以看到在第 10 個月中,每個日期都被寫為浮點數(shù)(在原始數(shù)據(jù)集中),如下所示:示例 Year:1884 1884.1。當您使用pd.to_datetime()將 float 系列轉(zhuǎn)換Date為Datetime. 所以問題可能是 #10 月份的日期轉(zhuǎn)換為 a 時Datetime,變成:(之前的示例)1884-01-01,這是一年中的第一個月,它對最終繪圖有影響。解決方案終于,我解決了我的問題!是的,錯誤是我在 UPDATE 段落中解釋的錯誤,因此我決定添加 a0作為 a,String其中日期(作為字符串)的長度為 6 以便更改,例如: 1884.1 ==> 1884.10df["len"] = df["Date"].apply(len)df["Date"] = df["Date"].where(df["len"] == 7, df["Date"] + "0")然后我刪除剛剛創(chuàng)建的 len 列。df.drop(columns="len", inplace=True)最后我將“日期”更改Datetime為pd.to_datetimedf["Date"] = pd.to_datetime(df["Date"], format='%Y.%m')df = df.set_index("Date")然后我繪制df["Price"].tail(100).plot()plt.title("S&P500 Composite Historical Data")plt.xlabel("Date")plt.ylabel("Price")plt.show()
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻1860條經(jīng)驗 獲得超9個贊

最簡單的方法是將日期轉(zhuǎn)換為實際的日期時間索引。這種方式matplotlib會自動拾取它并相應(yīng)地繪制它。例如,給定您的日期格式,您可以執(zhí)行以下操作:

df["Date"] = pd.to_datetime(df["Date"].astype(str), format='%Y.%m')
df = df.set_index("Date")
plt.plot(df["Price"].tail(100))

目前,您顯示的第一個圖實際上是Price針對 繪制列index,這似乎是從 0 - 1800 之類的常規(guī)范圍索引。您建議您的數(shù)據(jù)從 1981 年開始,因此盡管每個觀測值在 x 軸上均勻分布(間隔為 1,即從一個索引值到下一個索引值的跳躍)。這就是為什么該圖表看起來很合理。但 x 軸值卻沒有。

現(xiàn)在,當您將Date(作為浮點數(shù))設(shè)置為索引時,請注意,您沒有均勻地覆蓋 1981 年和 1982 年之間的時間間隔。您有 1981.1 - 1981.12 之間均勻間隔的值,但 1981.12 - 1982 之間沒有任何值。這就是為什么第二個圖表也按預(yù)期繪制的原因。DatetimeIndex如上所述將索引設(shè)置為 a應(yīng)該可以消除此問題,因為 Matplotlib 知道如何沿 x 軸均勻地間隔日期。


查看完整回答
反對 回復(fù) 2023-09-12
?
暮色呼如

TA貢獻1853條經(jīng)驗 獲得超9個贊

df['Date']將其視為不是一個好主意float。它應(yīng)該轉(zhuǎn)換成 pandas?datetime64[ns]。這可以使用 pandas 方法來實現(xiàn)pd.to_datetime。

嘗試這個:

import pandas as pd

import matplotlib.pyplot as plt


df = pd.read_csv('ie_data.csv')

df=df[['Date','Price']]

df.dropna(inplace=True)


#converting to pandas datetime format

df['Date'] = df['Date'].astype(str).map(lambda x : x.split('.')[0] + x.split('.')[1])

df['Date'] = pd.to_datetime(df['Date'], format='%Y%m')


df.set_index(['Date'],inplace=True)


#plotting

df.plot() #full data plot

df.tail(100).plot() #plotting just the tail


plt.title("S&P500 Composite Historical Data")

plt.xlabel("Date")

plt.ylabel("Price")

plt.show()

輸出:

https://img4.sycdn.imooc.com/650054390001d4f006040431.jpg

https://img3.sycdn.imooc.com/6500543f0001a0aa05930448.jpg

查看完整回答
反對 回復(fù) 2023-09-12
?
千萬里不及你

TA貢獻1784條經(jīng)驗 獲得超9個贊

我認為你的問題是你的 Date 是 float 類型,并將其作為 x 軸完全符合將此類數(shù)組作為([2012.01, 2012.02, ..., 2012.12, 2013.01....])x 軸的預(yù)期效果。您可以先將 Date 列轉(zhuǎn)換為 DateTimeIndex,然后使用內(nèi)置的 pandas 繪圖方法:

df["Price"].tail(100).plot()


查看完整回答
反對 回復(fù) 2023-09-12
  • 3 回答
  • 0 關(guān)注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號