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 页面中读取数据。

实例

import pandas as pd

# 从 CSV 文件中读取数据

df = pd.read_csv('data.csv')

# 从 Excel 文件中读取数据

df = pd.read_excel('data.xlsx')

# 从 SQL 数据库中读取数据

import sqlite3

conn = 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

实例

import pandas as pd

data = [

{"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 文件:

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 数据,并进行数据清洗和处理、数据选择和过滤、数据统计和描述等操作,具体如下:

实例

import pandas as pd

# 读取 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