pandas计算填值,函数映射,排序和运算汇总

目录

01算数函数和计算填值

02函数和映射

1.函数和映射-map

2. 函数和映射-apply,applymap

04 pandas排序

05 描述性统计信息函数


01算数函数和计算填值


| 方法     | 说明                  |
| add      | 加  +                 |
| sub      | 减  -                 |
| mul      | 乘  *                 |
| div        | 除  /                 |
| floordiv | 整除  //              |
| pow      | 幂运算(平方计算) ** |

import numpy as np
import pandas as pd

data1 = np.random.randint(1,10,(5,2))
data2 = np.random.randint(1,10,(6,2))

# 创建了两个dataframe对象
df1 = pd.DataFrame(data1,columns=['data1','data2'])
df2 = pd.DataFrame(data2,columns=['data1','data2'])
print(df1)
print(df2)

print('\n')
# 需求:让df1中data1和df2中data2这两列进行相加
# print(df1['data1'] + df2['data2'])

# add方法,进行相加
# fill_value 在缺失的地方给定一个值,让其能够正常运算
print(df1['data1'].add(df2['data2'], fill_value=0))

# 减
print(df1['data1'].sub(df2['data2'], fill_value=0))

# 乘
print(df1.mul(df2,fill_value=1))

# 除
print(df1.div(df2,fill_value=1))

# 整除
print(df1.floordiv(df2,fill_value=1))

# 平方运算
print(df1.pow(df2,fill_value=1))
# 针对对应的元素进行运算,如果只有一方有值,另一个没有,就会出现Nan(缺失值)  -->fill_value

02函数和映射

| 方法            | 说明                                                         |
| map()          | 基于series使用,输入使用字典或者函数(匿名函数)进行数值的修改 |
| apply()         | 基于series和DataFrame使用,输入函数名和参数进行传入, dataframe多出axis=1/0 控制行列 |
| applymap() | 基于DataFrame使用,对DataFrame中每个单元格执行指定函数的操作 |

1.函数和映射-map

import pandas as pd

# 创建dataframe对象
df1 = pd.DataFrame({
    'A': ['张三', '李四', '王五'],
    'B': [20, 25, 33],
    'C': ['T', 'N', 'T']})
print(df1)

# 需求:将c这列中N换成0,T为1
# 1、以字典形式映射修改
df1['C'] = df1['C'].map({'N':0,'T':1})
print(df1)

# 2、利用函数修改
def func(values):
    if values == 'N':
        return 0
    else:
        return 1

df2 = pd.DataFrame({
    'A': ['张三', '李四', '王五'],
    'B': [20, 25, 33],
    'C': ['T', 'N', 'T']})
# 函数,调用参数为函数名
df2['C'] = df2['C'].map(func)
print(df2)

# 3、匿名函数
df3 = pd.DataFrame({
    'A': ['张三', '李四', '王五'],
    'B': [20, 25, 33],
    'C': ['T', 'N', 'T']})
df3['C'] = df3['C'].map(lambda v:1 if v=='T' else 0)
print(df3)

2. 函数和映射-apply,applymap

import numpy as np
import pandas as pd

# apply()
# series
df = pd.DataFrame(np.random.random((4,3)),columns=list('abc'))
print(df)

# 需求:a列中所有的值各加上10
def func(values,x):
    return values+x

df['a'] = df['a'].apply(func,args=(10,))
print(df)

# dataframe  需要去控制添加、计算、判断 的行和列
# 要求:对比b,c两列,求每行的最大值
print(df[['b', 'c']].apply(np.max,axis=1))
# 求每一列的最大值
print(df[['b', 'c']].apply(np.max,axis=0))

# 需求:使用所有的数据,每一行使用最大值减去最小值
print('\n')
print(df.apply(lambda x: x.max() - x.min(), axis=1))

def func1(x):
    return x.max()-x.min()


print(df.apply(func1, axis=1))
# map方法是针对series进行操作,apply方法要要么是针对行 针对列

# applymap dataframe使用  对每一个元素进行操作
df1 = pd.DataFrame(np.random.random((4,3)),columns=list('abc'))
print('\n')
print(df1)

# 需求:将每一个元素进行保留3位小数
print(df1.applymap(lambda x: round(x, 3)))

04 pandas排序

| 参数          | 说明   |
| ascending | 值为True按升序排序,值为False按降序排序 |
| inplace      | 是否在原数据改变                        |
| by              | DataFrame中选中某一列进行排序           |

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'a': [3, 9, 4, 5],
    'b': [4, 7, 3, 6]
}, index=list('cdba'))
print(df)

# 针对行索引值进行排序
print(df.sort_index(ascending=False))

# 根据实际值排序(一般是针对一列)
# 根据b列进行排序
print(df.loc[:, 'b'].sort_values())

# 根据b这一列进行排序,别的也会连带着进行排序
print(df.sort_values(by='b'))

# 降序
print(df.sort_values(by='b',ascending=False))

# inplace  是否将原数据改变
print('\n')
df.sort_values(by='a',inplace=True)
print(df)

05 描述性统计信息函数

| 函数       | 描述               |
| count()    | 计算非空元素的数量 |
| sum()      | 所有值之和         |
| mean()     | 所有值的平均值     |
| median()  | 所有值的中位数     |
| std()        | 值的标准差         |
| min()       | 最小值             |
| max()      | 最大值             |
| abs()      | 绝对值             |
| prod()     | 数组元素的乘积     |
| cumsum()  | 累计总和           |
| cumprod() | 累计乘积           |
 

import numpy as np
import pandas as pd

data = {
    'name':pd.Series(['张三', '李四', '王五']),
    'age':pd.Series([23, 30, 26]),
    'math':pd.Series([60, 80, 95]),
    'chinese':pd.Series([80, 75, 70]),
    'english':pd.Series([59, 65, 60])
}
df = pd.DataFrame(data)
print(df)

# 所有的统计方法,都可以控制行和列 axis=0/1
# count:统计非空元素的数量
print(df.count(axis=0))
print(df.count(axis=1))

# 求出三名同学各科的总分
print(df[['math', 'chinese', 'english']].sum(axis=1))
# 将结果新增一列打印
df['total'] = df[['math', 'chinese', 'english']].sum(axis=1)
print(df)

# 三科平均值
df['avg'] = df[['math', 'chinese', 'english']].mean(axis=1)
print(df)

# 获取英语成绩的中位数
print(df['english'].median())

# 三科的标准差
print(df[['math', 'chinese', 'english']].std(axis=1))

# 各科的最大值和最小值
print('\n')
print(df[['math', 'chinese', 'english']].max(axis=0))
print(df[['math', 'chinese', 'english']].min(axis=0))

print('\n')
# 绝对值
df1 = pd.DataFrame(np.random.randn(3,5))
print(df1)
print(df1.abs())  # abs(df1)

# 计算每一行/列的乘积
df2 = pd.DataFrame(np.random.randint(1,10,(3,5)))
print(df2)
print('\n')
print(df2.prod())  # 默认列
print(df2.prod(axis=1))  # 行

print(df2[1])
print(df2[1].cumsum())  # 元素累加
print(df2[1].cumprod())   # 元素累乘
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值