最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從基礎(chǔ)到高級詳解DataFrame中時間序列操作的核心方法

 更新時間:2026年02月24日 09:33:28   作者:detayun  
時間序列數(shù)據(jù)是數(shù)據(jù)分析中最常見的類型之一,本文將系統(tǒng)介紹DataFrame中時間序列操作的核心方法,希望可以幫助大家掌握時間數(shù)據(jù)處理的全流程

引言

時間序列數(shù)據(jù)是數(shù)據(jù)分析中最常見的類型之一,從股票價格到傳感器讀數(shù),從網(wǎng)站流量到銷售數(shù)據(jù),幾乎所有領(lǐng)域都會產(chǎn)生時間序列數(shù)據(jù)。Pandas的DataFrame提供了強(qiáng)大而靈活的時間序列處理能力,使得清洗、轉(zhuǎn)換和分析時間數(shù)據(jù)變得高效而直觀。本文將系統(tǒng)介紹DataFrame中時間序列操作的核心方法,幫助你掌握時間數(shù)據(jù)處理的全流程。

一、時間序列基礎(chǔ):創(chuàng)建與索引

1. 創(chuàng)建時間序列DataFrame

import pandas as pd
import numpy as np

# 方法1:直接指定索引為DatetimeIndex
dates = pd.date_range('2023-01-01', periods=6, freq='D')
df = pd.DataFrame({'value': [10, 21, 19, 27, 33, 30]}, index=dates)

# 方法2:從字符串列轉(zhuǎn)換為時間索引
data = {'date': ['2023-01-01', '2023-01-02', '2023-01-03'],
        'value': [10, 21, 19]}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])  # 轉(zhuǎn)換為datetime類型
df.set_index('date', inplace=True)       # 設(shè)置為索引

2. 常用時間頻率

Pandas支持豐富的頻率字符串:

  • 'D':日歷日
  • 'B':工作日
  • 'H':小時
  • 'T''min':分鐘
  • 'S':秒
  • 'W':周
  • 'M':月末
  • 'Q':季末
  • 'Y''A':年末

二、時間序列重采樣與頻率轉(zhuǎn)換

1. 降采樣(Downsampling)

將高頻數(shù)據(jù)轉(zhuǎn)換為低頻數(shù)據(jù),通常需要聚合操作:

# 創(chuàng)建每日數(shù)據(jù)
daily_dates = pd.date_range('2023-01-01', periods=30, freq='D')
daily_data = pd.DataFrame({'value': np.random.randint(10, 50, 30)}, 
                         index=daily_dates)

# 轉(zhuǎn)換為周數(shù)據(jù)(取每周平均值)
weekly_data = daily_data.resample('W').mean()

# 轉(zhuǎn)換為月數(shù)據(jù)(取每月最大值)
monthly_data = daily_data.resample('M').max()

2. 升采樣(Upsampling)

將低頻數(shù)據(jù)轉(zhuǎn)換為高頻數(shù)據(jù),通常需要填充或插值:

# 創(chuàng)建月度數(shù)據(jù)
monthly_dates = pd.date_range('2023-01-01', periods=6, freq='M')
monthly_data = pd.DataFrame({'value': [10, 20, 15, 25, 30, 18]}, 
                           index=monthly_dates)

# 轉(zhuǎn)換為日數(shù)據(jù)(前向填充)
daily_upsampled = monthly_data.resample('D').ffill()

# 使用線性插值
daily_interpolated = monthly_data.resample('D').interpolate(method='linear')

三、時間偏移與滾動計算

1. 時間偏移操作

# 創(chuàng)建時間序列
ts = pd.Series(range(5), 
              index=pd.date_range('2023-01-01', periods=5, freq='D'))

# 時間偏移
print(ts.shift(2))      # 向前移動2天(未來值變?yōu)镹aN)
print(ts.shift(-1))     # 向后移動1天(過去值變?yōu)镹aN)
print(ts.tshift(1, freq='B'))  # 按工作日偏移

2. 滾動計算(Rolling Window)

# 創(chuàng)建股票價格數(shù)據(jù)
dates = pd.date_range('2023-01-01', periods=10, freq='B')
prices = pd.DataFrame({'price': [100, 102, 101, 105, 107, 
                                106, 108, 110, 109, 112]}, 
                     index=dates)

# 計算5日移動平均
prices['5_day_avg'] = prices['price'].rolling(window=5).mean()

# 計算帶權(quán)重的移動平均
weights = np.array([0.1, 0.2, 0.2, 0.2, 0.3])
prices['weighted_avg'] = prices['price'].rolling(5).apply(
    lambda x: np.sum(x * weights), raw=True
)

# 滾動標(biāo)準(zhǔn)差
prices['5_day_std'] = prices['price'].rolling(5).std()

四、時間序列的日期/時間組件提取

# 創(chuàng)建時間序列
ts = pd.Series(pd.date_range('2023-01-01', periods=5, freq='D'), 
              name='dates')

# 提取日期組件
date_info = pd.DataFrame({
    'year': ts.dt.year,
    'month': ts.dt.month,
    'day': ts.dt.day,
    'weekday': ts.dt.weekday,  # 星期幾(0=周一)
    'quarter': ts.dt.quarter,  # 季度
    'day_of_year': ts.dt.dayofyear,  # 一年中的第幾天
    'is_month_end': ts.dt.is_month_end,  # 是否月末
    'hour': ts.dt.hour,  # 如果包含時間部分
    'minute': ts.dt.minute
})

五、高級時間序列操作

1. 時間感知的分組聚合

# 創(chuàng)建帶時間戳的銷售數(shù)據(jù)
sales_data = pd.DataFrame({
    'amount': np.random.randint(50, 200, 200),
    'category': np.random.choice(['A', 'B', 'C'], 200)
}, index=pd.date_range('2023-01-01', periods=200, freq='H'))

# 按小時和類別分組統(tǒng)計
hourly_sales = sales_data.groupby([
    sales_data.index.hour,  # 按小時分組
    'category'
]).agg({
    'amount': ['sum', 'mean', 'count']
})

# 展平多級列索引
hourly_sales.columns = ['_'.join(col).strip() for col in hourly_sales.columns.values]

2. 時間差計算

# 創(chuàng)建事件時間序列
events = pd.Series([
    pd.Timestamp('2023-01-01 09:00'),
    pd.Timestamp('2023-01-01 09:30'),
    pd.Timestamp('2023-01-01 10:15')
], name='event_time')

# 計算時間差
time_diffs = events.diff()  # 相鄰事件時間差
total_diff = events.iloc[-1] - events.iloc[0]  # 總時間跨度

# 轉(zhuǎn)換為分鐘數(shù)
print(time_diffs.dt.total_seconds() / 60)

3. 處理時區(qū)

# 創(chuàng)建無時區(qū)時間序列
naive_ts = pd.Series(pd.date_range('2023-01-01', periods=3), name='dates')

# 添加時區(qū)信息
localized_ts = naive_ts.dt.tz_localize('UTC')  # 設(shè)置為UTC時區(qū)

# 轉(zhuǎn)換時區(qū)
ny_ts = localized_ts.dt.tz_convert('America/New_York')
tokyo_ts = localized_ts.dt.tz_convert('Asia/Tokyo')

六、時間序列可視化

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

# 創(chuàng)建帶趨勢的時間序列
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=100, freq='D')
values = np.cumsum(np.random.randn(100)) + 50
df = pd.DataFrame({'value': values}, index=dates)

# 繪制時間序列圖
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['value'], label='Daily Value')

# 添加7日移動平均線
rolling_avg = df['value'].rolling(7).mean()
plt.plot(df.index, rolling_avg, 'r-', label='7-Day Avg')

# 格式化x軸日期顯示
plt.gca().xaxis.set_major_locator(mdates.WeekdayLocator(interval=2))
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.gcf().autofmt_xdate()  # 自動旋轉(zhuǎn)日期標(biāo)簽

plt.title('Time Series Analysis')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend()
plt.grid(True)
plt.show()

七、性能優(yōu)化技巧

  • 使用DatetimeIndex:確保時間列作為索引而非普通列,可顯著提高查詢性能
  • 選擇適當(dāng)頻率:重采樣時選擇最接近實際需求的頻率,避免不必要的計算
  • 并行處理:對于大型時間序列,考慮使用daskmodin等并行計算庫
  • 使用類別類型:對于重復(fù)的字符串標(biāo)簽(如股票代碼),轉(zhuǎn)換為category類型
  • 內(nèi)存優(yōu)化:對于長時間序列,考慮使用int96int64存儲時間戳而非datetime64[ns]

總結(jié)

Pandas的DataFrame為時間序列分析提供了全面而強(qiáng)大的工具集,從基礎(chǔ)的時間創(chuàng)建和索引,到復(fù)雜的重采樣、滾動計算和時區(qū)處理,幾乎覆蓋了所有常見的時間數(shù)據(jù)處理需求。掌握這些技術(shù)后,你可以高效地處理金融數(shù)據(jù)、傳感器數(shù)據(jù)、日志數(shù)據(jù)等各種時間序列場景。

實際應(yīng)用中,建議從簡單操作開始,逐步掌握高級功能。記住,時間序列分析的關(guān)鍵在于理解數(shù)據(jù)的內(nèi)在時間結(jié)構(gòu),合理選擇頻率和處理缺失值,這些往往比技術(shù)實現(xiàn)本身更重要。隨著經(jīng)驗的積累,你會發(fā)現(xiàn)Pandas的時間序列功能能夠優(yōu)雅地解決越來越復(fù)雜的數(shù)據(jù)分析問題。

以上就是從基礎(chǔ)到高級詳解DataFrame中時間序列操作的核心方法的詳細(xì)內(nèi)容,更多關(guān)于DataFrame時間序列操作的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Python實現(xiàn)音頻雙通道分離

    使用Python實現(xiàn)音頻雙通道分離

    這篇文章主要介紹了使用Python實現(xiàn)音頻雙通道分離的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 如何使用Python提取Chrome瀏覽器保存的密碼

    如何使用Python提取Chrome瀏覽器保存的密碼

    今天小編教大家怎么用Python提取Chrome瀏覽器保存的密碼,在這需要導(dǎo)入一些必要模塊定義一些有用的函數(shù)來幫助我們在主函數(shù)中調(diào)用,具體實例代碼跟隨小編一起學(xué)習(xí)下吧
    2021-06-06
  • Python jieba分詞庫的使用方法詳解

    Python jieba分詞庫的使用方法詳解

    本文詳細(xì)介紹了jieba中文分詞庫的使用方法,從基礎(chǔ)入門到進(jìn)階用法,涵蓋了各種分詞模式、自定義詞典、停用詞過濾、詞性標(biāo)注、關(guān)鍵詞提取、并行分詞等功能,并提供了實戰(zhàn)場景和性能優(yōu)化技巧,幫助用戶高效地進(jìn)行中文文本分析和處理,需要的朋友可以參考下
    2026-03-03
  • python+pandas生成指定日期和重采樣的方法

    python+pandas生成指定日期和重采樣的方法

    下面小編就為大家分享一篇python+pandas生成指定日期和重采樣的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python 實現(xiàn)自動導(dǎo)入缺失的庫

    Python 實現(xiàn)自動導(dǎo)入缺失的庫

    這篇文章主要介紹了Python 實現(xiàn)自動導(dǎo)入缺失的庫,解決導(dǎo)入 Python 庫失敗的問題,本文分三種情況給大家介紹,需要的朋友可以參考下
    2019-10-10
  • Python 實例方法、類方法、靜態(tài)方法的區(qū)別與作用

    Python 實例方法、類方法、靜態(tài)方法的區(qū)別與作用

    Python中至少有三種比較常見的方法類型,即實例方法,類方法、靜態(tài)方法。它們是如何定義的呢?如何調(diào)用的呢?它們又有何區(qū)別和作用呢?感興趣的朋友跟隨小編一起看看吧
    2019-08-08
  • Python入門教程(二十七)Python的日期

    Python入門教程(二十七)Python的日期

    Python 中的日期不是其自身的數(shù)據(jù)類型,導(dǎo)入名為 datetime 的模塊,把日期視作日期對象進(jìn)行處理,有許多方法可以返回有關(guān)日期對象的信息,需要的朋友可以參考下
    2023-04-04
  • Python中的面向?qū)ο缶幊淘斀?上)

    Python中的面向?qū)ο缶幊淘斀?上)

    這篇文章主要介紹了Python中的面向?qū)ο缶幊淘斀?上),本文講解了創(chuàng)建類、實例化類、類屬性、特殊方法內(nèi)建屬性、靜態(tài)變量屬性、實例變量屬性、方法屬性、靜態(tài)方法、類方法等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 完美解決python中ndarray 默認(rèn)用科學(xué)計數(shù)法顯示的問題

    完美解決python中ndarray 默認(rèn)用科學(xué)計數(shù)法顯示的問題

    今天小編就為大家分享一篇完美解決python中ndarray 默認(rèn)用科學(xué)計數(shù)法顯示的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python中列表、字典、元組數(shù)據(jù)結(jié)構(gòu)的簡單學(xué)習(xí)筆記

    Python中列表、字典、元組數(shù)據(jù)結(jié)構(gòu)的簡單學(xué)習(xí)筆記

    這篇文章主要介紹了Python中列表、字典、元組數(shù)據(jù)結(jié)構(gòu)的簡單學(xué)習(xí)筆記,文中講到了字典在Python3中特性和操作方法的一些變化,需要的朋友可以參考下
    2016-03-03

最新評論

平罗县| 奇台县| 石台县| 衢州市| 孝感市| 汾阳市| 泗水县| 商水县| 商南县| 固阳县| 五峰| 白山市| 商丘市| 大悟县| 上栗县| 达拉特旗| 洛宁县| 山西省| 博乐市| 逊克县| 阜城县| 称多县| 武城县| 手游| 灵台县| 应城市| 新巴尔虎左旗| 泽普县| 抚松县| 连江县| 宜阳县| 双城市| 秦皇岛市| 东阳市| 五寨县| 富源县| 内江市| 从江县| 汨罗市| 乌拉特后旗| 田东县|