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