import numpy as np
import pandas as pd
index = pd.date_range('1/1/2000',periods=8)
s = pd.Series(np.random.randn(5),index = ['a','b','c','d','e'])
df = pd.DataFrame(np.random.randn(8,3),index = index,columns=['A','B','C'])
# -------------------------------------------------------------------------
# 目录:
# 属性和底层数据
# 加速操作
# 广播操作-加减乘除
# 缺失值与填充缺失值
# 比较操作
# 布尔简化----> df和Series的对比
# 描述性他统计 ----> 求和等函数
# 最大值与最小值对应的索引-离散化与分位数
# 函数应用
# 重置索引与更换标签-align--填充
# 迭代 for i in object
# .dt 访问器 -访问时间的工具
# 排序
# -------------------------------------------------------------------------
# -------------------------------------------------------------------------
# 属性和底层数据
# Pandas可以通过多个属性访问元数据:shape和轴标签。
# 推荐使用to_numpy
# -------------------------------------------------------------------------
df.columns = [x.lower() for x in df.columns]
# .array用于提取数据
s.array # pd.Series 转换为array数组
df_array = df.index.array
# 提取Numpy数组,,s.to_numpy() 或者 np.asarray()
# 推荐使用to_numpy
# s.to_numpy() # 可以转换,可以转换类型
np_array = np.asarray(s)
# -------------------------------------------------------------------------
# 加速操作
# 借助numexpr与bolltleneck支持库,Pandas可以加速特定类型的二进制数值与布尔操作。默认启用状态
# 处理大数据加速效果明显,numexpr使用智能分块、缓存与多核技术;
# bottleneck是一组专属cpython例程,处理nans值的数组时,特别快
# https://pandas.pydata.org/pandas-docs/stable/install.html#install-recommended-dependencies
# -------------------------------------------------------------------------
# pd.set_option('compute.use_bottlenect',False)
# pd.set_option('compute.use_numexpr',False)
# -------------------------------------------------------------------------
# 广播操作-加减乘除
# https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sub.html
# add(),sub(),mul(),div(),radd(),rsub() 加减乘除
# -------------------------------------------------------------------------
df_operator = pd.DataFrame({
'one':pd.Series(np.random.randn(3),index=list('abc')),
'two':pd.Series(np.random.randn(4),index=list('abcd')),
'three':pd.Series(np.random.randn(3),index=list('bcd'))
})
row_operator = df_operator.iloc[1]
column_operator = df_operator['two']
df_operator.sub(row_operator,axis='columns') # 相减
# 多层索引,多层索引指定,需要按行处理,axis=0,level指定索引
dfmi_operator = df_operator.copy()
dfmi_operator.index = pd.MultiIndex.from_tuples([(1,'a'),(1,'b'),(1,'c'),(2,'a')],names=['first','second'])
dfmi_operator.sub(column_operator,axis=0,level='second')
# divmod ,内置函数,,同时执行向下取整数与模运算 div,rem = divmod(s,[3])
# 缺失值, df.add(df2,fill_value = 0)
# -------------------------------------------------------------------------
# 缺失值与填充缺失值
# Series与DataFrame支持fill_value选项。
# -------------------------------------------------------------------------
# df.add(df2,fill_value=0)
# -------------------------------------------------------------------------
# 比较操作
# Series与DataFrame支持eq、ne、lt、gt、le、ge
# -------------------------------------------------------------------------
# df.gt(df2)
# -------------------------------------------------------------------------
# 布尔简化
# empty() any() all() bool() 可以把数据汇总简化至单个布尔值
# https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.bool.html#pandas.DataFrame.bool
# -------------------------------------------------------------------------
(df>0).all() # (df>0).any.any()
# 比较对象是否有效
df + df == df+2 # Series与DataFrame等