Python库-pandas详解

Posted Buckletime

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python库-pandas详解相关的知识,希望对你有一定的参考价值。

Python库-pandas详解

1. pandas介绍

pandas 是用于数据挖掘的Python库

  • 便捷的数据处理能力
  • 独特的数据结构
  • 读取文件方便
  • 封装了matplotlib的画图和numpy的计算

pandas的数据结构

  • Series
    • Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。由索引(index)和列组成。
  • DataFrame
    • DataFrame 是一个表格型的数据结构,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典。

案例应用

创建一个符合正态分布的10个股票5天的涨跌幅数据,使用pandas中的数据结构 DataFrame() 处理数据

# 导入库
import numpy as np
import pandas as pd

# 创建一个符合正态分布的10个股票5天的涨跌幅数据
stocks = np.random.normal(0, 1, [10, 5])
# 使用pandas中的数据结构 DataFrame() 处理数据
stocks_rise = pd.DataFrame(stocks)
# 设置行索引,获取行数 stocks_rise.shape[0] 进行遍历 列表生成式
index_row = ['股票'.format(i+1) for i in range(stocks_rise.shape[0])]
# 设置列索引,日期是一个时间序列,为了简便,使用pd.date_range()生成一组连续的时间序列
# pd.date_range(start,end,periods,freq) start:开始时间, end:结束时间
# periods:时间天数, freq:递进单位,默认1天,'B'默认略过周末
index_col = pd.date_range(start='20220201',periods=stocks_rise.shape[1],freq='B')
# 添加索引,注意数据是ndarray数据 index表示行索引,columns表示列索引
data = pd.DataFrame(stocks, index=index_row, columns=index_col)
print(data)

      2022-02-01  2022-02-02  2022-02-03  2022-02-04  2022-02-07
股票1    -2.054041   -1.170757    0.162393    0.253333   -1.638837
股票2    -1.463734    0.408459    0.530070   -0.925281    1.454630
股票3    -0.511517   -0.827591   -2.076265    0.139486    0.658707
股票4    -1.698789    0.250902   -0.624713    1.378845   -1.672292
股票5     0.683233   -1.083694    0.810567    0.421215    1.375385
股票6    -0.296111   -0.946959    0.836536   -1.179879   -0.397406
股票7     0.017772    0.180210    2.022776    0.436337   -1.555866
股票8     0.638262   -0.790932    1.077822   -1.746631   -0.591360
股票9    -0.681391   -0.613255   -1.849094    0.438304   -0.503742
股票10   -0.243500   -1.733623   -1.137840    0.124976   -0.415727

2. Series

pd.Series( data, index, dtype, name, copy)

参数说明:

data:一组数据(ndarray 类型)。
index:数据索引标签,如果不指定,默认从 0 开始。
dtype:数据类型,默认会自己判断。
name:设置名称。
copy:拷贝数据,默认为 False。

Series实例

# 通过数组创建Series
s = pd.Series([6, 5, 2], index=['x', 'y', 'z'])
print(s)
x    6
y    5
z    2
# 通过字典创建Series
s = pd.Series(
    'day': 2,
    'month': 2,
    'year': 2022
)
print(s)
day         2
month       2
year     2022
dtype: int64
# 通过索引操作数据
print(s['year'])
2022

3. DataFrame

3.1 DataFrame结构

DataFrame对象既有行索引,又有列索引

  • 行索引:表明不同行,横向索引,叫index,axis=0
  • 列索引:表明不同列,纵向索引,叫columns,axis=1

3.2 DataFrame属性与方法

  • shape DataFrame的形状
  • index DataFrame行索引
  • columns DataFrame列索引
  • values DataFrame的值
  • T DataFrame转置
  • head(n) DataFrame的前n行,默认为前5行
  • tail(n) DataFrame的后n行,默认为后5行
print(data.shape)  # (10, 5)
print(data.index)
# Index(['股票1', '股票2', '股票3', '股票4', '股票5', '股票6', '股票7', '股票8', '股票9', '股票10'], dtype='object')
print(data.columns)
# DatetimeIndex(['2022-02-01', '2022-02-02', '2022-02-03', '2022-02-04',
#                '2022-02-07'],
#               dtype='datetime64[ns]', freq='B')
print(data.values)
print(data.T)

3.2 DataFrame索引的设置

1 修改行列索引值

  • 必须整体全部修改,不能单独修改某个索引
index_row2 = ['股票_'.format(i + 1) for i in range(stocks_rise.shape[0])]
data.index = index_row2
print(data)

2 重设索引

  • reset_index(drop=False)
    • 设置新的下标索引
    • drop:默认为False,不删除原来索引
# 重设索引
print(data.reset_index(drop=False))

3 以某列值设为新的索引

  • set_index(keys,drop=True)
    • keys:列索引名称或者列索引名称的列表
    • drop:默认为True,当作新的索引,删除原来索引
# 创建
df = pd.DataFrame(
    'month': [1, 4, 7, 10],
    'year': [2018, 2019, 2020, 2021],
    'sale': [55, 40, 84, 33]
)
print(df)
   month  year  sale
0      1  2018    55
1      4  2019    40
2      7  2020    84
3     10  2021    33
# 以月份设置新的索引
print(df.set_index('month'))
       year  sale
month            
1      2018    55
4      2019    40
7      2020    84
10     2021    33
# 设置多个索引,以年和月份
# 如果设置索引是两个的时候,就是multiIndex
print(df.set_index(['year', 'month']))
            sale
year month      
2018 1        55
2019 4        40
2020 7        84
2021 10       33

4. 基本数据操作

4.1 索引重命名

  • rename(mapper=None,inplace=False)
    • mapper:映射结构,修改columns或index要传入一个映射体,可以是字典、函数
    • inplace:默认为False,不改变数据,返回一个新的DataFrame

4.2 通过索引操作数据

1. 直接使用行列索引(先列后行)

  • 先行后列会报错
  • 不支持切片,会报错
stocks = np.random.normal(0, 1, [10, 5])
stocks_rise = pd.DataFrame(stocks)
index_row = ['股票'.format(i + 1) for i in range(stocks_rise.shape[0])]
index_col = pd.date_range(start='20220201', periods=stocks_rise.shape[1], freq='B')
data = pd.DataFrame(stocks, index=index_row, columns=index_col)
print(data.head())
     2022-02-01  2022-02-02  2022-02-03  2022-02-04  2022-02-07
股票1    0.663384    1.936687    1.992576    2.009280   -0.723381
股票2   -2.441452    0.081647   -0.738524   -0.620358   -1.930378
股票3    2.026646   -0.324842   -0.478456   -0.840363    1.492842
股票4   -0.188968   -1.180816    0.733197   -0.078608   -1.056264
股票5    1.219254   -1.738242    0.473682    0.288252    3.513113
# 索引先列后行获取数据
print(data['2022-02-03']['股票3'])
-0.47845617563179627

# print(data['股票3']['2022-02-03']) # 先行后列会报错
# print(data[:1, :2]) # 不支持切片,会报错

2. 结合loc或iloc使用索引(先行后列)

  • loc 通过索引名称访问
  • iloc 通过索引下标访问,支持切片
print(data.loc['股票3']['2022-02-03']) 
print(data.iloc[1, 1])
print(data.iloc[:3, :4])
  • loc或iloc还可以进行组合索引访问
# 获取前5行,两列的值
print(data.loc[data.index[:5], ['2022-02-01', '2022-02-02']])
print(data.iloc[0:5, data.columns.get_indexer(['2022-02-01', '2022-02-02'])])

4.3 排序

1. sort_values(by=,ascending=) 对内容进行排序

  • by:根据单个键或者多个键(优先级从前到后)进行排序,默认升序 ascending=True
  • ascending=False,降序
print(data.sort_values(by='2022-02-01', ascending=False))
print(data.sort_values(by=['2022-02-01', '2022-02-02'], ascending=False))

2. sort_index(ascending=) 对索引进行排序

  • 默认升序 ascending=True, 降序为False
print(data.sort_index(ascending=False))
说明:Series的排序方法与DataFrame方法一致,因为只有一列,也不用指定键,只需要指定是升序或降序

5. DataFrame运算

5.1 算术运算

和一般算数运算方法类似,举几个例子

import pandas as pd
df = pd.DataFrame(
    'month': [1, 4, 7, 10],
    'year': [2018, 2019, 2020, 2021],
    'sale': [55, 40, 84, 33]
)
n = df['sale'][0]   # 55
print(n.__add__(2))    # 加法运算 <=> +
print(n.__sub__(2))    # 减法运算 <=> -
print(n.__mul__(2))    # 乘法运算 <=> *
print(n.__divmod__(2)) # 除余,得到商和余数 (商, 余数)
print(n.__mod__(2))    # 模运算(余数)<=> %
print(n.__abs__())    # 绝对值运算

5.2 逻辑运算

  • 逻辑运算符号 < > | &
    • 获取逻辑运算结果
    • 将逻辑运算结果作为筛选条件进行数据筛选
print(df)
   month  year  sale
0      1  2018    55
1      4  2019    40
2      7  2020    84
3     10  2021    33
# 获取逻辑运算结果
print(df['sale'] > 50)
0     True
1    False
2     True
3    False
# 逻辑运算结果可以作为筛选的条件
print(df[df['sale'] > 50])  
Name: sale, dtype: bool
   month  year  sale
0      1  2018    55
2      7  2020    84
  • 逻辑运算函数
    • query(expr) 通过条件字符串进行查询符合条件的数据
    • isin(values) 对数据进行逻辑判断,判断数据是否在指定的values中
print(df.query('sale > 35 & sale < 80'))
   month  year  sale
0      1  2018    55
1      4  2019    40

print(df['sale'].isin([30, 40]))
0    False
1     True
2    False
3    False
Name: sale, dtype: bool

5.3 统计运算

  • describe() 综合分析,统计数量count,平均值mean,标准差std,最大值,最小值等
print(data.head().describe())
       2022-02-01  2022-02-02  2022-02-03  2022-02-04  2022-02-07
count    5.000000    5.000000    5.000000    5.000000    5.000000
mean     0.731207    0.016387   -0.292730   -0.050105    0.491857
std      0.692347    1.184870    1.038632    0.897436    0.808612
min     -0.019900   -1.273726   -1.526506   -0.766793   -0.416006
25%      0.558542   -0.963643   -1.228403   -0.563485    0.043999
50%      0.581686   -0.036380   -0.031193   -0.553368    0.136538
75%      0.665749    0.797005    0.541065    0.229670    1.331016
max      1.869961    1.558681    0.781386    1.403449    1.363740
  • 描述性统计函数

对于单个函数去统计的时候,坐标轴还是按照默认columns(axis=0),如需要对行统计,指定axis=1

函数名称描述说明
count()统计某个非空值的数量
sum()求和
mean()求均值
median()求中位数
mode()求众数
std()求标准差
min()求最小值
max()求最大值
idxmax最大值的索引
idxmin最小值的索引
abs()求绝对值
prod()求所有数值的乘积
cumsum()计算累计和
cumprod()计算累计积
  • 其他统计函数
函数名称描述说明
pct_change()百分比函数:将每个元素与其前一个元素进行比较,并计算前后数值的百分比变化
cov()协方差函数:用来计算 Series 对象之间的协方差。该方法会将缺失值(NAN )自动排除
corr()相关系数:计算数列或变量之间的相关系数,取值-1到1,值越大表示关联性越强,会排除NAN 值

5.4 自定义运算

apply(func,axis)

  • func:自定义运算函数
  • axis:默认为0,对列运算

6. pandas画图

对象.plot(x=None,y=None,kind=‘line’)

  • x和y表示标签或者位置,默认为None
  • kind:表示绘图的类型,默认为line,折线图
    • line:折线图
    • bar/barh:柱状图
    • hist:直方图
    • pie:饼状图
    • area:区域图
    • scatter:散点图
import matplotlib.pyplot as plt

rise = data.loc['股票1'].cumsum()
print(rise)
rise.plot()	# 画图
plt.show()	# 显示

7. 文件的读取和存储

pandas支持的常用文件类型包括:HDF5、CSV、SQL、XLS、JSON等

1.CSV

  • pd.read_csv(‘filepath_or_buffer’, usecols=[]) 读取csv文件数据
    • filepath_or_buffer:文件路径
    • sep:分隔符,默认为’,’
    • usecols:指定读取的列名,列表形式
import pandas as pd

data = pd.read_csv(r'../../fodder/stocks.csv', usecols=['open', 'high', 'low', 'close'])
print(data.head())
    open   high    low  close
0  29.76  29.97  29.52  29.96
1  28.49  29.51  28.42  29.50
2  28.76  28.95  28.47  28.50
3  28.41  28.95  28.32  28.90
4  28.37  28.61  28.33  28.36
  • df.to_csv(path_or_buf,columns=[],index=True,mode=‘w’) 将数据存储到csv文件中
    • path_or_buf:文件存放的路径
    • sep:分隔符,默认为’,’
    • columns:列,列表形式
    • mode:‘w’:重写,‘a’:追加
    • header:是否写进列索引值
    • index:是否写进行索引,默认True写进行索引,会将行索引变成一列数据
    • encoding:编码格式,默认为None
# 将前十行数据写进新的文件中 index设置False,不写行索引
data[:10].to_csv(r'../../fodder/test.csv', columns=['open', 'close'], index=False)
# 查看写进文件的数据
data2 = pd.read_csv(r'../../fodder/test.csv')
print(data2)
    open  close
0  29.76  29.96
1  28.49  29.50
2  28.76  28.50
3  28.41  28.90
4  28.37  28.36
5  27.48  28.34
6  27.66  27.84
7  28.03  27.55
8  28.65  28.37
9  28.39  28.84

2.HDF5

读取HDF5文件(.h5)需要安装tables模块

  • pd.read_hdf(path_or_buf, key=None) 读取HDF5文件
    • path_or_buf:文件路径
    • key:读取的键
  • df.to_hdf(path_or_buf, key) 写入HDF5文件
    • path_or_buf:文件路径
    • key:写入文件时,必须指定一个键
# 读取.h5文件数据
data = pd.read_hdf(r'../../fodder/stocks.h5')
print(data.head())
# 将数据写入.h5文件
data.to_hdf(r'../../fodder/test.h5', key='a')
data2 = pd.read_hdf(r'../../fodder/test.h5', key='a')
print(data2.head())

3.JSON

  • pd.read_jsonf(path_or_buf, orient=None,typ=‘frame’,lines=False) 读取json文件
    • path_or_buf:文件路径
    • orient:指定数据存储的json形式 ,‘split’,‘records’,‘index’,‘columns’,‘valuse’
    • typ:默认frame,指定转换成的对象类型Series或者DataFrame
    • lines:默认False,按照每行读取json
  • pd.to_jsonf(path_or_buf, orient=None,lines=False) 存储json文件
    • path_or_buf:文件路径
    • orient:指定数据存储的json形式
    • lines:默认False,一个对象存储为一行。一般设置为Ture
# 读取json文件
data = pd.read_json(r'../../fodder/33510.json', orient='records', lines=True)
print(data.head())
# 写入json文件
data.to_json(r'../../fodder/test.json', orient='records', lines=True)
data2 = pd.read_json(r'../../fodder/test.json')
print(data2.head())

8. 数据的高级处理

8.1 缺失值处理

缺失值NaN的类型是float

print(type(np.NAN))
<class 'float'>

1. 判断数据是否有缺失值

  • pd.isnull(df)
  • pd.notnull(df)
# 读取xls数据
data = pd.read_excel(r'../Python/demo/reptile/豆瓣电影TOP250/豆瓣电影TOP250.xls')
# 只要包含缺失值,就为True
np.any(pd.isnull(data)) 	# True

2. 处理NaN

  • 删除缺失值 dropna(inplace=False),前提是缺失值的类型必须是np.NaN
# dropna()方法可以指定是否在原数据上进行删除 默认inplace=False 不修改原数据
newdata = 

Python学习教程(Python学习路线):Pandas库基础分析-详解时间序列的处理

Python学习教程(Python学习路线):Pandas库基础分析-详解时间序列的处理

技术图片

 在使用Python进行数据分析时,经常会遇到时间日期格式处理和转换,特别是分析和挖掘与时间相关的数据,比如量化交易就是从历史数据中寻找股价的变化规律。Python中自带的处理时间的模块有datetime,NumPy库也提供了相应的方法,Pandas作为Python环境下的数据分析库,更是提供了强大的日期数据处理的功能,是处理时间序列的利器。

1、生成日期序列

主要提供pd.data_range()和pd.period_range()两个方法,给定参数有起始时间、结束时间、生成时期的数目及时间频率(freq=‘M’月,‘D’天,‘W’,周,‘Y’年)等。

两种主要区别在于pd.date_range()生成的是DatetimeIndex格式的日期序列;pd.period_range()生成的是PeriodIndex格式的日期序列。

以下通过生成月时间序列和周时间序列来对比下:

date_rng = pd.date_range(‘2019-01-01‘, freq=‘M‘, periods=12)
print(f‘month date_range(): date_rng‘)
"""
date_range():
DatetimeIndex([‘2019-01-31‘, ‘2019-02-28‘, ‘2019-03-31‘, ‘2019-04-30‘,
‘2019-05-31‘, ‘2019-06-30‘, ‘2019-07-31‘, ‘2019-08-31‘,
‘2019-09-30‘, ‘2019-10-31‘, ‘2019-11-30‘, ‘2019-12-31‘],
dtype=‘datetime64[ns]‘, freq=‘M‘)
"""
period_rng = pd.period_range(‘2019/01/01‘, freq=‘M‘, periods=12)
print(f‘month period_range(): period_rng‘)
"""
period_range():
PeriodIndex([‘2019-01‘, ‘2019-02‘, ‘2019-03‘, ‘2019-04‘, ‘2019-05‘, ‘2019-06‘,
‘2019-07‘, ‘2019-08‘, ‘2019-09‘, ‘2019-10‘, ‘2019-11‘, ‘2019-12‘],
dtype=‘period[M]‘, freq=‘M‘)
"""
date_rng = pd.date_range(‘2019-01-01‘, freq=‘W-SUN‘, periods=12)
print(f‘week date_range(): date_rng‘)
"""
week date_range():
DatetimeIndex([‘2019-01-06‘, ‘2019-01-13‘, ‘2019-01-20‘, ‘2019-01-27‘,
‘2019-02-03‘, ‘2019-02-10‘, ‘2019-02-17‘, ‘2019-02-24‘,
‘2019-03-03‘, ‘2019-03-10‘, ‘2019-03-17‘, ‘2019-03-24‘],
dtype=‘datetime64[ns]‘, freq=‘W-SUN‘)
"""
period_rng=pd.period_range(‘2019-01-01‘,freq=‘W-SUN‘,periods=12)
print(f‘week period_range(): period_rng‘)
"""
week period_range():
PeriodIndex([‘2018-12-31/2019-01-06‘, ‘2019-01-07/2019-01-13‘,
‘2019-01-14/2019-01-20‘, ‘2019-01-21/2019-01-27‘,
‘2019-01-28/2019-02-03‘, ‘2019-02-04/2019-02-10‘,
‘2019-02-11/2019-02-17‘, ‘2019-02-18/2019-02-24‘,
‘2019-02-25/2019-03-03‘, ‘2019-03-04/2019-03-10‘,
‘2019-03-11/2019-03-17‘, ‘2019-03-18/2019-03-24‘],
dtype=‘period[W-SUN]‘, freq=‘W-SUN‘)
"""
date_rng = pd.date_range(‘2019-01-01 00:00:00‘, freq=‘H‘, periods=12)
print(f‘hour date_range(): date_rng‘)
"""
hour date_range():
DatetimeIndex([‘2019-01-01 00:00:00‘, ‘2019-01-01 01:00:00‘,
‘2019-01-01 02:00:00‘, ‘2019-01-01 03:00:00‘,
‘2019-01-01 04:00:00‘, ‘2019-01-01 05:00:00‘,
‘2019-01-01 06:00:00‘, ‘2019-01-01 07:00:00‘,
‘2019-01-01 08:00:00‘, ‘2019-01-01 09:00:00‘,
‘2019-01-01 10:00:00‘, ‘2019-01-01 11:00:00‘],
dtype=‘datetime64[ns]‘, freq=‘H‘)
"""
period_rng=pd.period_range(‘2019-01-01 00:00:00‘,freq=‘H‘,periods=12)
print(f‘hour period_range(): period_rng‘)
"""
hour period_range():
PeriodIndex([‘2019-01-01 00:00‘, ‘2019-01-01 01:00‘, ‘2019-01-01 02:00‘,
‘2019-01-01 03:00‘, ‘2019-01-01 04:00‘, ‘2019-01-01 05:00‘,
‘2019-01-01 06:00‘, ‘2019-01-01 07:00‘, ‘2019-01-01 08:00‘,
‘2019-01-01 09:00‘, ‘2019-01-01 10:00‘, ‘2019-01-01 11:00‘],
dtype=‘period[H]‘, freq=‘H‘)
"""

2、生成Timestamp对象及转换

创建一个Timestamp时间戳对象有pd.Timestamp()方法和pd.to_datetime()方法。如下所示:

ts=pd.Timestamp(2019,1,1)
print(f‘pd.Timestamp()-1:ts‘)
#pd.Timestamp()-1:2019-01-01 00:00:00
ts=pd.Timestamp(dt(2019,1,1,hour=0,minute=1,second=1))
print(f‘pd.Timestamp()-2:ts‘)
#pd.Timestamp()-2:2019-01-01 00:01:01
ts=pd.Timestamp("2019-1-1 0:1:1")
print(f‘pd.Timestamp()-3:ts‘)
#pd.Timestamp()-3:2019-01-01 00:01:01
print(f‘pd.Timestamp()-type:type(ts)‘)
#pd.Timestamp()-type:<class ‘pandas._libs.tslibs.timestamps.Timestamp‘>
#dt=pd.to_datetime(2019,1,1) 不支持
dt=pd.to_datetime(dt(2019,1,1,hour=0,minute=1,second=1))
print(f‘pd.to_datetime()-1:dt‘)
#pd.to_datetime()-1:2019-01-01 00:01:01
dt=pd.to_datetime("2019-1-1 0:1:1")
print(f‘pd.to_datetime()-2:dt‘)
#pd.to_datetime()-2:2019-01-01 00:01:01
print(f‘pd.to_datetime()-type:type(dt)‘)
#pd.to_datetime()-type:<class ‘pandas._libs.tslibs.timestamps.Timestamp‘>
#pd.to_datetime生成自定义时间序列
dtlist=pd.to_datetime(["2019-1-1 0:1:1", "2019-3-1 0:1:1"])
print(f‘pd.to_datetime()-list:dtlist‘)
#pd.to_datetime()-list:DatetimeIndex([‘2019-01-01 00:01:01‘, ‘2019-03-01 00:01:01‘], dtype=‘datetime64[ns]‘, freq=None)
#时间戳转换为period月时期
pr = ts.to_period(‘M‘)
print(f‘ts.to_period():pr‘)
#ts.to_period():2019-01
print(f‘pd.to_period()-type:type(pr)‘)
#pd.to_period()-type:<class ‘pandas._libs.tslibs.period.Period‘>

3、生成period对象及转换

#定义时期period
per=pd.Period(‘2019‘)
print(f‘pd.Period():per‘)
#pd.Period():2019
per_del=pd.Period(‘2019‘)-pd.Period(‘2018‘)
print(f‘2019和2018间隔per_del年‘)#可以直接+、-整数(代表年)
#2019和2018间隔1年
#时期转换为时间戳
print(per.to_timestamp(how=‘end‘))#2019-12-31 00:00:00
print(per.to_timestamp(how=‘start‘))#2019-01-01 00:00:00

4、生成时间间隔Timedelta

#生成时间间隔Timedelta
print(pd.Timedelta(days=5, minutes=50, seconds=20, milliseconds=10, microseconds=10, nanoseconds=10))
#5 days 00:50:20.010010
#获取当前时间
now=pd.datetime.now()
#计算当前时间往后50天的日期
dt=now+pd.Timedelta(days=50)
print(f‘当前时间是now, 50天后时间是dt‘)
#当前时间是2019-06-08 17:59:31.726065, 50天后时间是2019-07-28 17:59:31.726065
#只显示年月日
print(dt.strftime(‘%Y-%m-%d‘))#2019-07-28

5、重采样及频率转换

#asfreq 按季度显示索引值
#‘DatetimeIndex‘ object has no attribute ‘asfreq‘
date=pd.date_range(‘1/1/2018‘, periods=20, freq=‘D‘)
tsdat_series=pd.Series(range(20),index=date)
tsp_series=tsdat_series.to_period(‘D‘)
print(tsp_series.index.asfreq(‘Q‘))
date=pd.period_range(‘1/1/2018‘, periods=20, freq=‘D‘)
tsper_series=pd.Series(range(20),index=date)
print(tsper_series.index.asfreq(‘Q‘))
"""
PeriodIndex([‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘,
‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘,
‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘, ‘2018Q1‘,
‘2018Q1‘, ‘2018Q1‘],
dtype=‘period[Q-DEC]‘, freq=‘Q-DEC‘)
"""
#resample 按季度统计并显示
print(tsdat_series.resample(‘Q‘).sum().to_period(‘Q‘))
"""
2018Q1 190
Freq: Q-DEC, dtype: int64
"""
#groupby 按周进行汇总求平均值
print(tsdat_series.groupby(lambda x:x.weekday).mean())
"""
0 7.0
1 8.0
2 9.0
3 10.0
4 11.0
5 12.0
6 9.5
dtype: float64
"""

之前也跟大家有讲过pandas的相关教程,大家有不理解的地方可回过头复习一下,更多的Python学习教程Python学习路线会继续跟大家分享!

以上是关于Python库-pandas详解的主要内容,如果未能解决你的问题,请参考以下文章

学Python怎么能不会数据分析?(Pandas超详解)

Python Pandas——Read_csv详解

python数据分析基础005 -pandas详解_pandas入门这一篇就足够了

Pandas详解一

Python pandas 数据框的str列内置的方法详解

小蛇学python(10)tkinter和pandas的补充