常用基本函数
csv数据:joyful-pandas/data/learn_pandas.csv at master · datawhalechina/joyful-pandas (github.com)
汇总函数
**head
,tail
**分别表示返回表或者序列的前n
行和后n
行,其中n
默认为5。
import numpy as np
import pandas as pd
df = pd.read_csv('xuexi.csv')
df = df[df.columns[1:]]
print('df.head(3) :')
print(df.head(3))
print('df.tail(3) :')
print(df.tail(3))
**info, describe
**分别返回表的信息概况和表中数值列对应的主要统计量。
import numpy as np
import pandas as pd
df = pd.read_csv('xuexi.csv')
df = df[df.columns[1:]]
print("df.info():\n")
df.info() # 函数
print('------------')
print("df.describe():\n", df.describe()) # DataFrame类型
特征统计函数
在Series
和DataFrame
上定义了许多统计函数,最常见的是sum, mean, median, var, std, max, min
。
得到身高、体重平均值:
import numpy as np
import pandas as pd
df = pd.read_csv('xuexi.csv')
df = df[df.columns[1:]]
de_wh = df[['Height', 'Weight']]
print(de_wh.mean())
得到身高、体重最大值:
print(de_wh.max())
quantile, count, idxmax
,它们分别返回的是分位数、非缺失值个数、最大值对应的索引。
import numpy as np
import pandas as pd
df = pd.read_csv('xuexi.csv')
df = df[df.columns[1:]]
de_wh = df[['Height', 'Weight']]
print('分位数\n', de_wh.quantile(0.75))
print('非缺失值\n', de_wh.count())
print('最大值对应的索引\n', de_wh.idxmax())
上面这些所有的函数,由于操作后返回的是标量,所以又称为聚合函数,它们有一个公共参数
axis
,默认为0代表逐列聚合。
axis=0
:表示沿着列的方向进行操作,即对每一列进行聚合。这是默认值。axis=1
:表示沿着行的方向进行操作,即对每一行进行聚合。
唯一值函数
对序列使用unique
和nunique
可以分别得到其唯一值组成的列表和唯一值的个数。
import numpy as np
import pandas as pd
df = pd.read_csv('xuexi.csv')
df = df[df.columns[0:7]]
print('唯一值')
print(df['School'].unique())
print('唯一值计数')
print(df['School'].nunique())
value_counts
可以得到唯一值和其对应出现的频数。
import numpy as np
import pandas as pd
df = pd.read_csv('xuexi.csv')
df = df[df.columns[0:7]]
print('唯一值')
print(df['School'].unique())
print('唯一值计数')
print(df['School'].nunique())
print('唯一值及其出现次数')
print(df['School'].value_counts())
drop_duplicates
可以观察多个列组合的唯一值。(在Series类型上也可以使用)
其中的关键参数是
keep
,默认值first
表示每个组合保留第一次出现的所在行,last
表示保留最后一次出现的所在行,False
表示把所有重复组合所在的行剔除。此外,
duplicated
和drop_duplicates
的功能类似,但前者返回了是否为唯一值的布尔列表,其keep
参数与后者一致。其返回的序列,把重复元素设为True
,否则为False
。drop_duplicates
等价于把duplicated
为True
的对应行剔除。
import numpy as np
import pandas as pd
df = pd.read_csv('xuexi.csv')
df = df[df.columns[0:7]]
df_demo = df[['Gender','Transfer','Name']]
print(df_demo.drop_duplicates(['Gender', 'Transfer']))
替换函数
一般而言,替换操作是针对某一个列进行的,因此下面的例子都以Series
举例。pandas
中的替换函数可以归纳为三类:映射替换、逻辑替换、数值替换。
其中映射替换包含replace
方法。
将Gender
列属性值为Female、Male换为0、1:
print(df['Gender'].replace({'Female':0, 'Male':1}).head())
逻辑替换包括了where
和mask
,这两个函数是完全对称的:where
函数在传入条件为False
的对应行进行替换,而mask
在传入条件为True
的对应行进行替换,当不指定替换值时,替换为缺失值。
s = pd.Series([-1, 1.2345, 100, -50])
s = s.where(s < 0)
print(s)
s = pd.Series([-1, 1.2345, 100, -50])
s = s.where(s < 0, 321)
print(s)
数值替换包含了round, abs, clip
方法,它们分别表示按照给定精度四舍五入、取绝对值和截断。
排序函数
排序共有两种方式,其一为值排序,其二为索引排序,对应的函数是sort_values
和sort_index
。
为了演示排序函数,下面先利用
set_index
方法把年级和姓名两列作为索引,多级索引的内容和索引设置的方法将在第三章进行详细讲解。
df_demo = df[['Grade', 'Name', 'Height', 'Weight']].set_index(['Grade','Name'])
对身高进行排序,默认参数ascending=True
为升序。
print(df_demo.sort_values('Height').head())
# 降序
print(df_demo.sort_values('Height', ascending=False).head())
在排序中,经常遇到多列排序的问题,比如在体重相同的情况下,对身高进行排序,并且保持身高降序排列,体重升序排列:
print(df_demo.sort_values(['Weight','Height'],ascending=[True,False]).head())
索引排序的用法和值排序完全一致,**只不过元素的值在索引中,此时需要指定索引层的名字或者层号,用参数level
表示。**另外,需要注意的是字符串的排列顺序由字母顺序决定。
print(df_demo.sort_index(level=['Grade','Name'],ascending=[True,False]).head())
apply方法
apply
方法常用于DataFrame
的行迭代或者列迭代。
import numpy as np
import pandas as pd
df = pd.read_csv('xuexi.csv')
df = df[df.columns[0:]]
df_demo = df[['Height', 'Weight']]
def my_mean(x):
res = x.mean()
return res
df_demo.apply(my_mean)
x
就指代被调用的df_demo
表中逐个输入的序列
得益于传入自定义函数的处理,
apply
的自由度很高,但这是以性能为代价的。一般而言,使用pandas
的内置函数处理和apply
来处理同一个任务,其速度会相差较多,因此只有在确实存在自定义需求的情境下才考虑使用apply
。
Joyful-Pandas-课程详情 | Datawhale