目录
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()) # 元素累乘