pandas 的DataFrame是处理较为复杂数据的理想工具。如果时间充裕,值得认真学习并练习。
DataFrame与matlab里面的table有相似之处。
## multiIndex是处理三维或者高维数组的大杀器。
## 新手学习multiIndex可能有一些难度,但美景在险峰,值得。
##Pandas multiIndex DataFrame 2023年06月03日
import pandas as pd
import numpy as np
## step1 生成multiIndex数据,包含时间维、光谱维和距离维三个维度。
##step1.1 构造时间维、光谱维和距离维
timeAxis = ['18:00','18:25','23:00','20:00']##生成乱序的时间维
spectralAxis =['F0','F2','F1']##生成乱序的光谱维,正确顺序是F0,F1,F2
rangeAxis = ['1km','5km','3km']##生成乱序的距离维
##step1.2 构造出index, 记住DataFrame包含index和columns
idxData = pd.MultiIndex.from_product([spectralAxis,rangeAxis])
## step1.3 生成随机数 个数为:len(spectralAxis)*len(rangeAxis)*len(timeAxis)
yy = np.random.rand(len(spectralAxis)*len(rangeAxis),len(timeAxis))
## step1.4 构造出multiIndex的DataFrame
df = pd.DataFrame(yy,index=idxData,columns=timeAxis)
## step1.5 进行命名
df.index.names=['spectral','range']
df.columns.names=['time']
##print('AA',df)
##step2 切片 推荐使用pd.IndexSlice方法
## step2.1 先排序以方便切片
df = df.sort_index(axis=0 )##对index排序
df = df.sort_index(axis=1)##对columns排序
print('CC',df)
## step2.2 切片,此时切片的感觉可谓:随心所欲,不逾矩。方便得不要不要的。
idx = pd.IndexSlice##推荐的方法
print('DD',df.loc[idx['F0':'F2','1km':'6km'],idx['18:00':'18:40']])
## step3 聚合分析
F0 = df.loc[idx['F0'],idx['18:00':'19:00']].sum(axis=1)##得到18:00到19:00的F0数据求和合并后的廓线
print('EE',F0)