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 页面中读取数据。 | 
查看数据
| 函数 | 说明 | 
|---|---|
| df.head(n) | 显示前 n 行数据; | 
| df.tail(n) | 显示后 n 行数据; | 
| df.info() | 显示数据的信息,包括列名、数据类型、缺失值等; | 
| df.describe() | 显示数据的基本统计信息,包括均值、方差、最大值、最小值等; | 
| df.shape | 显示数据的行数和列数。 | 
数据清洗
| 函数 | 说明 | 
|---|---|
| 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') | 选择列名匹配正则表达式的列; | 
| df.sample(n) | 随机选择 n 行数据。 | 
数据排序
| 函数 | 说明 | 
|---|---|
| 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) | 生成透视表。 | 
数据合并
| 函数 | 说明 | 
|---|---|
| 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') | 使用字符串表达式选择列中满足条件的行。 | 
数据统计和描述
| 函数 | 说明 | 
|---|---|
| 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
TQDM(进度条)
tqdm很多日常的使用,通过设置构造函数就可以了,而构造函数里面的参数又比较多,我会一个一个来加以说明。
构造函数参数:
 
iterable : iterable, optional
    第一个参数是一个可迭代对象,比如迭代器、生成器、列表等等,实现可迭代的进度条。
 
desc : str, optional
    字符串,用于进度条的前缀描述
 
total : int, optional
    预期的迭代数目,默认为None,一般情况下我们习惯用len(iterable)即可
 
leave : bool, optional
    保留进度条存在的痕迹,简单来说就是会把进度条的最终形态保留下来,默认为True
 
file : io.TextIOWrapper or io.StringIO, optional
    指定消息的输出,默认是sys.stderr
 
ncols : int, optional
    整个输出消息的宽度。如果指定,动态调整的进度停留在这个边界。如果未指定,尝试使用环境的宽度。如果为0,将不打印任何东西(只统计)。
 
mininterval : float, optional
    最小进度更新间隔,以秒为单位(默认值:0.1),即表示0.1秒更新一下进度
 
maxinterval : float, optional
    最大进度更新间隔,以秒为单位(默认值:10)。
 
miniters : int, optional
    Minimum progress update interval, in iterations.If specified, will set mininterval to 
    0.最小进度更新周期
 
ascii : bool, optional
    如果不设置,默认为unicode编码
 
disable : bool, optional
 
是否禁用整个进度条包装(如果为True,进度条不显示),默认为False,即显示进度条
 
等等,参数很多,可以参考官方文档
 
返回值Returns
    out : decorated iterator.
    返回为一个被包装之后的迭代器
1. tqdm.tqdm
传入数字list:
from tqdm import tqdm
for i in tqdm(range(1, 5)):
    print(i)
2. tqdm.trange
更简略的表达 tqdm(range()) 可以用 trange()
from tqdm import trange
for i in trange(range(1, 5)):
    print(i)
3. set_description 通过 tqdm 提供的 set_description 方法可以实时查看每次处理的数据
from tqdm import tqdm
pbar = tqdm(["a", "b", "c", "d"])
for c in pbar:
    pbar.set_description("Processing %s" % c)
				
		
	


Comments NOTHING