目录
01算数函数和计算填值
02函数和映射
1.函数和映射-map
2. 函数和映射-apply,applymap
pandas%E6%8E%92%E5%BA%8F-toc" style="margin-left:0px;">04 pandas排序
05 描述性统计信息函数
01算数函数和计算填值
| 方法 | 说明 |
| add | 加 + |
| sub | 减 - |
| mul | 乘 * |
| div | 除 / |
| floordiv | 整除 // |
| pow | 幂运算(平方计算) ** |
import numpy as np import pandas as pddata1 = 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 0else:return 1df2 = 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+xdf['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)))
pandas%E6%8E%92%E5%BA%8F">04 pandas排序
| 参数 | 说明 |
| ascending | 值为True按升序排序,值为False按降序排序 |
| inplace | 是否在原数据改变 |
| by | DataFrame中选中某一列进行排序 |
import numpy as np import pandas as pddf = 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 pddata = {'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()) # 元素累乘