Pandas 常用函数 - PANDAS教程

Pandas 常用函数

以下列出了 Pandas 常用的一些函数及使用实例:

读取数据

函数 说明
pd.read_csv(filename) 读取 CSV 文件;
pd.read_excel(filename) 读取 Excel 文件;
pd.read_sql(query, connection_object) 从 SQL 数据库读取数据;
pd.read_json(json_string) 从 JSON 字符串中读取数据;
pd.read_html(url) 从 HTML 页面中读取数据。
示例代码
importpandasaspd# 从 CSV 文件中读取数据df=pd.read_csv('data.csv')# 从 Excel 文件中读取数据df=pd.read_excel('data.xlsx')# 从 SQL 数据库中读取数据importsqlite3conn=sqlite3.connect('database.db')df=pd.read_sql('SELECT * FROM table_name',conn)# 从 JSON 字符串中读取数据json_string='{"name": "John", "age": 30, "city": "New York"}'df=pd.read_json(json_string)# 从 HTML 页面中读取数据url='https://www.runoob.com'dfs=pd.read_html(url)df=dfs[0]# 选择第一个数据框

查看数据

函数 说明
df.head(n) 显示前 n 行数据;
df.tail(n) 显示后 n 行数据;
df.info() 显示数据的信息,包括列名、数据类型、缺失值等;
df.describe() 显示数据的基本统计信息,包括均值、方差、最大值、最小值等;
df.shape 显示数据的行数和列数。
示例代码
# 显示前五行数据df.head()# 显示后五行数据df.tail()# 显示数据信息df.info()# 显示基本统计信息df.describe()# 显示数据的行数和列数df.shape
示例代码
importpandasaspddata=[{"name":"Google","likes":25,"url":"https://www.google.com"},{"name":"Runoob","likes":30,"url":"https://www.runoob.com"},{"name":"Taobao","likes":35,"url":"https://www.taobao.com"}]df=pd.DataFrame(data)# 显示前两行数据print(df.head(2))# 显示前最后一行数据print(df.tail(1))

以上实例输出结果为:


     name  likes                     url

0  Google     25  https://www.google.com

1  Runoob     30  https://www.runoob.com

     name  likes                     url

2  Taobao     35  https://www.taobao.com

数据清洗

函数 说明
df.dropna() 删除包含缺失值的行或列;
df.fillna(value) 将缺失值替换为指定的值;
df.replace(old_value, new_value) 将指定值替换为新值;
df.duplicated() 检查是否有重复的数据;
df.drop_duplicates() 删除重复的数据。
示例代码
# 删除包含缺失值的行或列df.dropna()# 将缺失值替换为指定的值df.fillna(0)# 将指定值替换为新值df.replace('old_value','new_value')# 检查是否有重复的数据df.duplicated()# 删除重复的数据df.drop_duplicates()

数据选择和切片

函数 说明
df[column_name] 选择指定的列;
df.loc[row_index, column_name] 通过标签选择数据;
df.iloc[row_index, column_index] 通过位置选择数据;
df.ix[row_index, column_name] 通过标签或位置选择数据;
df.filter(items=[column_name1, column_name2]) 选择指定的列;
df.filter(regex='regex') 选择列名匹配正则表达式的列;
df.sample(n) 随机选择 n 行数据。
示例代码
# 选择指定的列df['column_name']# 通过标签选择数据df.loc[row_index,column_name]# 通过位置选择数据df.iloc[row_index,column_index]# 通过标签或位置选择数据df.ix[row_index,column_name]# 选择指定的列df.filter(items=['column_name1','column_name2'])# 选择列名匹配正则表达式的列df.filter(regex='regex')# 随机选择 n 行数据df.sample(n=5)

数据排序

函数 说明
df.sort_values(column_name) 按照指定列的值排序;
df.sort_values([column_name1, column_name2], ascending=[True, False]) 按照多个列的值排序;
df.sort_index() 按照索引排序。
示例代码
# 按照指定列的值排序df.sort_values('column_name')# 按照多个列的值排序df.sort_values(['column_name1','column_name2'],ascending=[True,False])# 按照索引排序df.sort_index()

数据分组和聚合

函数 说明
df.groupby(column_name) 按照指定列进行分组;
df.aggregate(function_name) 对分组后的数据进行聚合操作;
df.pivot_table(values, index, columns, aggfunc) 生成透视表。
示例代码
# 按照指定列进行分组df.groupby('column_name')# 对分组后的数据进行聚合操作df.aggregate('function_name')# 生成透视表df.pivot_table(values='value',index='index_column',columns='column_name',aggfunc='function_name')

数据合并

函数 说明
pd.concat([df1, df2]) 将多个数据框按照行或列进行合并;
pd.merge(df1, df2, on=column_name) 按照指定列将两个数据框进行合并。
示例代码
# 将多个数据框按照行或列进行合并df=pd.concat([df1,df2])# 按照指定列将两个数据框进行合并df=pd.merge(df1,df2,on='column_name')

数据选择和过滤

函数 说明
df.loc[row_indexer, column_indexer] 按标签选择行和列。
df.iloc[row_indexer, column_indexer] 按位置选择行和列。
df[df['column_name'] > value] 选择列中满足条件的行。
df.query('column_name > value') 使用字符串表达式选择列中满足条件的行。

数据统计和描述

函数 说明
df.describe() 计算基本统计信息,如均值、标准差、最小值、最大值等。
df.mean() 计算每列的平均值。
df.median() 计算每列的中位数。
df.mode() 计算每列的众数。
df.count() 计算每列非缺失值的数量。

实例

假设我们有如下的 JSON 数据,数据保存到 data.json 文件:

示例代码
[{"name":"Alice","age":25,"gender":"female","score":80},{"name":"Bob","age":null,"gender":"male","score":90},{"name":"Charlie","age":30,"gender":"male","score":null},{"name":"David","age":35,"gender":"male","score":70}]

我们可以使用 Pandas 读取 JSON 数据,并进行数据清洗和处理、数据选择和过滤、数据统计和描述等操作,具体如下:

示例代码
importpandasaspd# 读取 JSON 数据df=pd.read_json('data.json')# 删除缺失值df=df.dropna()# 用指定的值填充缺失值df=df.fillna({'age':0,'score':0})# 重命名列名df=df.rename(columns={'name':'姓名','age':'年龄','gender':'性别','score':'成绩'})# 按成绩排序df=df.sort_values(by='成绩',ascending=False)# 按性别分组并计算平均年龄和成绩grouped=df.groupby('性别').agg({'年龄':'mean','成绩':'mean'})# 选择成绩大于等于90的行,并只保留姓名和成绩两列df=df.loc[df['成绩']>=90,['姓名','成绩']]# 计算每列的基本统计信息stats=df.describe()# 计算每列的平均值mean=df.mean()# 计算每列的中位数median=df.median()# 计算每列的众数mode=df.mode()# 计算每列非缺失值的数量count=df.count()

输出结果如下:

# df

   姓名  年龄 性别  成绩

1  Bob   0  male  90



# grouped

             年龄  成绩

性别                

female  25.000000  80

male    27.500000  80



# stats

         成绩

count   1.0

mean   90.0

std     NaN

min    90.0

25%    90.0

50%    90.0

75%    90.0

max    90.0



# mean

成绩    90.0

dtype: float64



# median

成绩    90.0

dtype: float64



# mode

    姓名    成绩

0  Bob  90.0



# count

姓名    1

成绩    1

dtype: int64