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
(
)
# 显示后五行数据
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.head(n)
|
显示前 n 行数据;
|
df.tail(n)
|
显示后 n 行数据;
|
df.info()
|
显示数据的信息,包括列名、数据类型、缺失值等;
|
df.describe()
|
显示数据的基本统计信息,包括均值、方差、最大值、最小值等;
|
df.shape
|
显示数据的行数和列数。
|
# 删除包含缺失值的行或列
df.
dropna
(
)
# 将缺失值替换为指定的值
df.
fillna
(
0
)
# 将指定值替换为新值
df.
replace
(
'old_value'
,
'new_value'
)
# 检查是否有重复的数据
df.
duplicated
(
)
# 删除重复的数据
df.
drop_duplicates
(
)
数据选择和切片
函数
|
说明
|
df.dropna()
|
删除包含缺失值的行或列;
|
df.fillna(value)
|
将缺失值替换为指定的值;
|
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'
)
# 随机选择 n 行数据
df.
sample
(
n
=
5
)
函数
|
说明
|
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.
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
=
'value'
,
index
=
'index_column'
,
columns
=
'column_name'
,
aggfunc
=
'function_name'
)
函数
|
说明
|
df.groupby(column_name)
|
按照指定列进行分组;
|
df.aggregate(function_name)
|
对分组后的数据进行聚合操作;
|
df.pivot_table(values, index, columns, aggfunc)
|
生成透视表。
|
# 将多个数据框按照行或列进行合并
df
=
pd.
concat
(
[
df1
,
df2
]
)
# 按照指定列将两个数据框进行合并
df
=
pd.
merge
(
df1
,
df2
,
on
=
'column_name'
)
数据选择和过滤
函数
|
说明
|
pd.concat([df1, df2])
|
将多个数据框按照行或列进行合并;
|
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')
|
使用字符串表达式选择列中满足条件的行。
|
假设我们有如下的 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
(
)
输出结果如下:
姓名 年龄 性别 成绩
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
函数
|
说明
|
df.describe()
|
计算基本统计信息,如均值、标准差、最小值、最大值等。
|
df.mean()
|
计算每列的平均值。
|
df.median()
|
计算每列的中位数。
|
df.mode()
|
计算每列的众数。
|
df.count()
|
计算每列非缺失值的数量。
|