目录
1.示例数据准备
2.重要参数说明
axis参数说明
skipna参数
3.常用统计方法
求和
求平均
累计求和
最小值/最大值
最小值/最大值的索引
累计最小值/最大值
累计乘积
一阶差分
非空值个数
df中等于某个值的索引
样本的分位数
方差和标准差
样本的偏度和峰度
描述性统计
将分位数添加到描述性统计
百分比变化
样本的相关系数
排名
判断样本的每个值是否在某个集合中
去重
统计频率
1.示例数据准备
import numpy as np
import pandas as pddata = [[1.4, np.nan],[7.1, -4.5],[np.nan, np.nan],[0.75, -1.3]]df = pd.DataFrame(data,index = ['a', 'b', 'c', 'd'],columns=['one','two'])print(df)
2.重要参数说明
axis参数说明
axis = 0就是行与行之间运算,axis = 1是列与列之间
# 对每一列求和
print(df.sum(axis = 0))
skipna参数
bool参数,是否跳过空值
默认skipna等于True,即空值不参与运算
如果空值nan要参与运算,结果会是nan
# 对每一列求和,nan参与运算
print(df.sum(axis = 0, skipna = False))
3.常用统计方法
求和
print("求和")
print(df.sum()) # 对每一列求和
print(df.sum(axis = 0))
print(df.sum(axis = 1)) # 对每一行求和
# 注意默认空值不进行运算,也就是【非空数求和】
求平均
print("求平均")
print(df.mean()) # 对每一列求平均
print(df.mean(axis = 'columns', skipna = False)) # 对每一行求平均
# 注意默认空值不进行运算,也就是【非空数求和/非空数个数】
累计求和
print("累计求和")
print(df.cumsum()) # NaN 处仍为 NaN, 默认NaN 不参与运算
print(df.cumsum(axis = 0))
print(df.cumsum(axis = 1))
最小值/最大值
print("最小值")
# 空值不参与比较,全为空值时返回空值
print(df.min())
print(df.min(axis = 0))
print(df.min(axis = 1)) print("全局最小值")
print(df.min().min()) print("最大值")
print(df.max())
print(df.max(axis = 0))
print(df.max(axis = 1)) print("全局最大值")
print(df.max().max())
最小值/最大值的索引
print("最小值的索引")
ret = df.idxmin()
print(type(ret))
print(ret)
print(df.idxmin(axis=1))print("最大值的索引")
print(df.idxmax())
print(df.idxmax(axis=1))
运行结果
最小值的索引
<class 'pandas.core.series.Series'>
one d
two b
dtype: object
a one
b two
c NaN
d two
dtype: object
最大值的索引
one b
two d
dtype: object
a one
b one
c NaN
d one
dtype: object
累计最小值/最大值
print("累计最小值")
print(df.cummin())
print(df.cummin(axis = 0))
print(df.cummin(axis = 1)) print("累计最大值")
print(df.cummax())
print(df.cummax(axis = 0))
print(df.cummax(axis = 1))
累计乘积
print("样本值的累计乘积") # NaN 处仍为 NaN, 默认NaN 不参与运算
print(df.cumprod())
print(df.cumprod(axis = 1))
一阶差分
print("样本值的一阶差分") # NaN与任何运算都是NaN
print(df.diff())
print(df.diff(axis = 1))
非空值个数
print("统计非空值个数")
print(df.count())
print(df.count(axis = 0))
print(df.count(axis = 1))
df中等于某个值的索引
print("全局最小值的索引")
print(df[df == df.min().min()])
boolmin = df[df == df.min().min()]
result = []
for index in boolmin.index:for col in boolmin.columns:if boolmin.loc[index,col] == df.min().min():result.append([index,col])
print(result)
样本的分位数
print("样本的分位数")
print(df.quantile()) # 默认50%分位数,就是中位数,返回series
print(df.quantile(0.7)) # 70%分位数,返回series
print(df.quantile(0.7,axis = 0)) # 70%分位数,返回seriesprint(df.quantile(0.7,axis = 1)) # 70%分位数,返回seriesprint(df["one"].quantile(0.7)) # 70%分位数,返回一个值
方差和标准差
print("计算样本的方差")
print(df.var())
print(df.var(axis = 1)) print("计算样本的标准差")
print(df.std())
print(df.std(axis = 1))
样本的偏度和峰度
print("计算样本的偏度(三阶矩)")
print(df.skew())
print(df.skew(axis = 1)) print("计算样本的峰度(四阶矩)")
print(df.kurt())
print(df.kurt(axis = 1))
描述性统计
print("数的描述统计")
# 总个数、平均值、标准差、最小值最大值、分位数
print(df.describe()) # dataframe
# 默认分位数是25%,50%,75%
# one two
# count 3.000000 2.000000
# mean 3.083333 -2.900000
# std 3.493685 2.262742
# min 0.750000 -4.500000
# 25% 1.075000 -3.700000
# 50% 1.400000 -2.900000
# 75% 4.250000 -2.100000
# max 7.100000 -1.300000print("非数的描述统计")
# 总个数、不重复值个数、出现最多的值、出现最多的值的出现次数
obj = pd.Series(['a', 'a', 'b', 'c'] * 4)
print(obj.describe()) # Series
# count 16
# unique 3
# top a
# freq 8
# dtype: object
将分位数添加到描述性统计
# 自定义分位数
print(df.describe(percentiles=[.01,.05,.95,.99]))
# one two
# count 3.000000 2.000000
# mean 3.083333 -2.900000
# std 3.493685 2.262742
# min 0.750000 -4.500000
# 1% 0.763000 -4.468000
# 5% 0.815000 -4.340000
# 50% 1.400000 -2.900000
# 95% 6.530000 -1.460000
# 99% 6.986000 -1.332000
# max 7.100000 -1.300000
百分比变化
print("百分比变化")
df = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['one','two'])print(df)
print(df.pct_change())
print(df.pct_change(axis = 0))
print(df.pct_change(axis = 1))
样本的相关系数
print("样本的相关系数")
df = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['one','two'])print("计算两个 Series 之间的相关系数")
print(df['one'].corr(df['two']))print("获取完整的相关系数矩阵(列和列两两之间)")
print(df.corr())print("获取整个 dataframe 与某一列的相关相关系数")
print(df.corrwith(df['two']))print("获取两个 dataframe 之间的相关系数")
df1 = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['one','two'])df2 = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['three','two'])
print(df1.corrwith(df2)) # 相同列名之间计算相关系数,只有一方存在的列返回空# 传入参数 axis = 'columns'即可按行进行计算
# 注意计算行与行的相关系数时,列名必须全部相同
df1 = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['one','two'])df2 = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['one','two'])
print(df1.corrwith(df2, axis = 'columns'))
排名
pdobj.rank()排名
pdobj.rank(method = "average")
pdobj.rank(method = "min")
pdobj.rank(method = "average")
pdobj.rank(method = "first")
pdobj.rank(method = "dense")
解释
示例情况:假设有6个样本,A 是第 4 名,B,C,D,E 同为第 5 名,E 为第 9 名
参数解释
- average:BCDE 三人的平均排名都是(5+6+7+8)/2 = 4.5
- min:BCDE的排名都取最小排名取5
- max:BCD的排名都取最大排名取8
- first:值相同时,按出现顺序排名
- dense:相同值的类型为同一个整数排名,不同值之间的排名步长为 1
默认情况下,按升序排名,也就是值越小排名越低,method取average。
obj = pd.Series([7, -5, 7, 4, 2, 0, 4], index = list('ABCDEFG'))print(obj.rank()) # 默认按升序 and 平均排名排序
print(obj.rank(ascending = True, method = 'average'))
print(obj.rank(method = 'first'))print(obj.rank(ascending = False)) # 按降序 and 默认的平均排名排序# dataframe 的排名
frame = pd.DataFrame({'b': [4.3, 7, -3, 2], 'a': [0, 1, 0, 1],'c': [-2, 5, 8, -2.5]})
print(frame)print(frame.rank()) # 默认行与行之间进行排名
print(frame.rank(axis = 'columns')) # 按列之间进行排名
判断样本的每个值是否在某个集合中
# 判断值是否具有成员资格
obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
vip = ['b', 'c', 'e']
result = obj.isin(vip)
print(result)
去重
# 去重
obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
newUnique = obj.unique()
print(newUnique) # ['c' 'a' 'd' 'b']
统计频率
# 统计频率
obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
# sort是否排序,默认False,如果设置为True,则按频率降序
print(pd.value_counts(obj.values, sort=False))
"""
输出结果:
c 3
b 2
a 3
d 1
dtype: int64
"""
end