import yfinance as yf
import numpy as np
import pandas as pd
ETF_DB = ['QQQ', 'EGFIX']
fundsret = yf.download(ETF_DB, start=datetime.date(2020,12,31), end=datetime.date(2022,4,30), interval='1mo')['Adj Close'].pct_change()
df = pd.DataFrame(fundsret)
df
給我:

我正在嘗試洗掉資料框中不是月末的行,例如行 2021-03-22。如何讓資料框通過并洗掉日期不以“01”結尾的行?
uj5u.com熱心網友回復:
df.reset_index(inplace=True)
# Convert the date to datetime64
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')
#select only day = 1
filtered = df.loc[df['Date'].dt.day == 1]
uj5u.com熱心網友回復:
你是說月份開始嗎?
您可以使用:
df = df[df.index.day==1]
可重現的例子:
df = pd.DataFrame(columns=['A', 'B'],
index=['2021-01-01', '2021-02-01', '2021-03-01',
'2021-03-22', '2021-03-31'])
df.index = pd.to_datetime(df.index, dayfirst=False)
輸出:
A B
2021-01-01 NaN NaN
2021-02-01 NaN NaN
2021-03-01 NaN NaN
月底
對于月底,您可以添加 1 天并檢查是否會跳轉到下個月:
end = (df.index pd.Timedelta('1d')).month != df.index.month
df = df[end]
或添加偏移量并檢查值是否未更改:
end = df.index == (df.index pd.offsets.MonthEnd(0))
df = df[end]
輸出:
A B
2021-03-31 NaN NaN
uj5u.com熱心網友回復:
import pandas as pd
import re
# Dummy Dictionary
dict={
'Date': ['2021-01-01','2022-03-01','2023-04-22','2023-04-01'],
'Name' : ['A','B','C','D']
}
# Making a DataFrame
df=pd.DataFrame(dict)
# Date Pattern Required
pattern= '(\d{4})-(\d{2})-01'
new_df=df[df['Date'].str.match(r'((\d{4})-(\d{2})-01)')]
print(new_df)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/491332.html
