Python中DataFrame常用统计方法

目录

1.示例数据准备

2.重要参数说明

axis参数说明

skipna参数

3.常用统计方法

求和

求平均

累计求和

最小值/最大值

最小值/最大值的索引

累计最小值/最大值

累计乘积

一阶差分

非空值个数

df中等于某个值的索引

样本的分位数

方差和标准差

样本的偏度和峰度

描述性统计

将分位数添加到描述性统计

百分比变化

样本的相关系数

排名

判断样本的每个值是否在某个集合中

去重

统计频率


1.示例数据准备

import numpy as np
import pandas as pd

data = [[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%分位数,返回series

print(df.quantile(0.7,axis = 1))  # 70%分位数,返回series

print(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.300000


print("非数的描述统计")
# 总个数、不重复值个数、出现最多的值、出现最多的值的出现次数
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

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到使用Python进行数据分析时,pandasDataFrame是一个非常强大和常用的工具。下面是一些常见的DataFrame操作: 1. 创建DataFrame: - 从列表或数组创建DataFrame:使用`pd.DataFrame()`函数,传入列表或数组。 - 从字典创建DataFrame:使用`pd.DataFrame()`函数,传入字典。 2. 查看DataFrame: - 查看前几行数据:使用`df.head(n)`,默认显示前5行。 - 查看后几行数据:使用`df.tail(n)`,默认显示后5行。 - 查看列名:使用`df.columns`。 - 查看索引:使用`df.index`。 - 查看数据类型:使用`df.dtypes`。 3. 选择数据: - 选择列:使用`df['column_name']`,返回Series对象。 - 选择多列:使用`df[['column1', 'column2']]`,返回DataFrame对象。 - 选择行:使用`.loc[]`或`.iloc[]`索引器,根据标签或位置选择行。 - 使用条件选择数据:使用布尔索引,如`df[df['column'] > 10]`。 4. 数据处理: - 添加列:使用`df['new_column'] = values`,可以将一个常量值或一个Series对象赋值给新列。 - 删除列:使用`df.drop(columns=['column1', 'column2'])`,可以删除指定的列。 - 修改列名:使用`df.rename(columns={'old_name': 'new_name'})`,可以修改指定列的名称。 - 处理缺失值:使用`df.dropna()`删除包含缺失值的行,使用`df.fillna(value)`填充缺失值。 5. 数据统计: - 汇总统计:使用`df.describe()`,返回关于数据的统计信息。 - 计算均值:使用`df.mean()`计算列的均值。 - 计算总和:使用`df.sum()`计算列的总和。 - 计算最大值、最小值、位数:使用`df.max()`、`df.min()`、`df.median()`等。 6. 数据排序: - 按列排序:使用`df.sort_values(by='column')`,可以按照指定的列对数据进行排序。 - 按索引排序:使用`df.sort_index()`,可以按照索引对数据进行排序。 7. 数据分组和聚合: - 使用`df.groupby('column')`进行分组,然后可以对分组后的数据进行聚合操作,如求和、平均值等。 这只是一些常见的DataFrame操作,还有很多其他功能可以在pandas文档找到。希望这些常用操作对你在数据分析有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值