Pandas 常用函数
一、读取数据
1. pd.read_csv(filename) 读取 CSV 文件;
2. pd.read_excel(filename) 读取 Excel 文件;
3. pd.read_sql(query, connection_object) 从 SQL 数据库读取数据;
4. pd.read_json(json_string) 从 JSON 字符串中读取数据;
5. 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] # 选择第一个数据框
二、查看数据
函数 说明
1. df.head(n) 显示前 n 行数据;
2. df.tail(n) 显示后 n 行数据;
2.1 df.head(N).tail(1).iloc[0,0] 排完序后取第N高的数据
3. df.info() 显示数据的信息,包括列名、数据类型、缺失值等;
4. df.describe() 显示数据的基本统计信息,包括均值、方差、最大值、最小值等;
5. df.shape 显示数据的行数和列数。
6. df.diff() 查看行与行之间的差值
# 显示前五行数据
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
三、数据清洗
1. df.isnull() 判断是否存在空值
2. df.dropna() 删除包含缺失值的行或列;
3. df.fillna(value) 将缺失值替换为指定的值;
4. df.replace(old_value, new_value) 将指定值替换为新值;
5. df.duplicated() 检查是否有重复的数据;
6. df.drop_duplicates() 删除重复的数据。
# 删除包含缺失值的行或列
df.dropna()
# 指定哪些数据被指定为空值
missing_values = ["n/a", "na", "--"]
df = pd.read_csv('property-data.csv', na_values = missing_values)
# 将缺失值替换为指定的值
df.fillna(0)
## 一般填充方法:均值、中位数、众数
# 使用列的均值来填补也是一种方法
x = df["ST_NUM"].mean()
# x = df["ST_NUM"].median() # 中位数
# x = df["ST_NUM"].mode() # 众数
df["ST_NUM"].fillna(x, inplace = True)
# 将指定值替换为新值
df.replace('old_value', 'new_value')
# 检查是否有重复的数据
df.duplicated()
# 删除重复的数据
df.drop_duplicates()
df.drop_duplicates(subset=['salary'],inplace=True)
7、 浅拷贝和深拷贝
# 浅拷贝 不可变数据类型内存地址不变,可变数据类型只拷贝一层,即外一层的数据类型发生变化
employee_new = df.copy()
# 深拷贝 不可变数据类型内存地址不变,可变数据类型发生变化
employee_new = df.copy(deep=True)
四、数据选择和切片
1. df[column_name] 选择指定的列;
2. df.loc[row_index, column_name] 通过标签选择数据;
3. df.iloc[row_index, column_index] 通过位置选择数据;
4. df.ix[row_index, column_name] 通过标签或位置选择数据;
5. df.filter(items=[column_name1, column_name2]) 选择指定的列;
6. df.filter(regex=‘regex’) 选择列名匹配正则表达式的列;
7. 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)
五、数据排序
1. df.sort_values(column_name) 按照指定列的值排序;
2. df.sort_values([column_name1, column_name2], ascending=[True, False]) 按照多个列的值排序;
3. df.sort_index() 按照索引排序。
# 按照指定列的值排序
df.sort_values('column_name')
# 按照多个列的值排序
df.sort_values(['column_name1', 'column_name2'], ascending=[True, False])
# 按照索引排序
df.sort_index()
六、数据分组和聚合
1. df.groupby(column_name) 按照指定列进行分组;
2. df.aggregate(function_name) 对分组后的数据进行聚合操作;
3. 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')
4、数据合并pd.merge()
pd.merge(person,address,on="personId",how="left")
七、数据选择和过滤
1. df.loc[row_indexer, column_indexer] 按标签选择行和列。
2. df.iloc[row_indexer, column_indexer] 按位置选择行和列。
3. df[df[‘column_name’] > value] 选择列中满足条件的行。
4. df.query(‘column_name > value’) 使用字符串表达式选择列中满足条件的行。
5. df.drop(“id”,axis=1,inplace=True) 删除id列和数据
八、数据统计和描述(读取json后的处理)
1. df.describe() 计算基本统计信息,如均值、标准差、最小值、最大值等。
2. df.mean() 计算每列的平均值。
3. df.median() 计算每列的中位数。
4. df.mode() 计算每列的众数。
5. 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 数据,并进行数据清洗和处理、数据选择和过滤、数据统计和描述等操作,具体如下:
# 读取 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