# 安装及导入
# 安装
可以使用 pip 安装
pip install pandas
# 导入
import pandas as pd |
# 数据结构
# Series
Series 是一种类似于一维数组的对象,它由一组数据(各种 Numpy 数据类型)以及一组与之相关的数据标签(即索引)组成
Series 只有行索引
例如,创建一个 Series 对象:
ser = pd.Series(data = [1, 2, 3], index = ['a', 'b', 'c']) |
其内容为:
a 1
b 2
c 3
# DataFrame
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)
DataFrame 既有行索引又有列索引
例如,创建一个 DataFrame 对象:
df = pd.DataFrame(data = np.array([[1, 2, 3], [4, 5, 6]]), columns = ['a', 'b', 'c']) |
其内容为:
a b c
0 1 2 3
1 4 5 6
下面将以 DataFrame 对象为例来介绍 pandas 的基本用法
# 数据输入
# 使用 read_csv 读取 csv 文件 | |
df = pd.read_csv('file_name') | |
# 或者:使用 read_csv 读取 csv 文件 | |
# read_csv 默认使用 '\t' 作为数据分隔符,需将分隔符设为 ',' | |
df = pd.read_table('file_name', sep=',') | |
# 读取 excel 文件 | |
pd.read_excel() | |
# 读取 json 文件 | |
pd.json() | |
# 读取 xml 文件 | |
pd.read_xml() |
# 数据输出
# 将 DataFrame 对象写入 csv 文件 | |
df.to_csv('file_name') | |
# 写入 excel 文件 | |
df.to_excel() | |
# 写入 json 文件 | |
df.to_json() | |
# 写入 xml 文件 | |
df.to_xml() |
# 查看数据
# DataFrame 对象的头部数据(默认显示 5 条数据) | |
df.head() | |
# DataFrame 对象的尾部数据(默认显示 5 条数据) | |
df.tail() | |
# DataFrame 对象的索引 | |
df.index | |
# DataFrame 对象的列名 | |
df.columns | |
# DataFrame 对象的统计信息 | |
df.describe() | |
# DataFrame 对象的摘要 | |
df.info() | |
# DataFrame 对象的形状 | |
df.shape | |
# 查看数据是否为空 | |
df.isnull() | |
# 查看各数据类型 | |
df.dtypes | |
# 查看某一列的所有值 | |
df[['column_name']] # 方法一 | |
df.loc[:, ['column_name']] # 方法二 | |
# 查看某一列的变量名及种类 | |
df['column_name'].value_counts() # 方法一 | |
df['column_name'].unique() # 方法二 | |
# 查看满足条件的值 | |
df[condition] | |
# 最大值对应的索引 | |
df.idxmax() | |
# 最小值对应的索引 | |
df.idxmin() |
# 缺失值处理
pandas 主要用 np.nan
表示缺失数据
一般情况下,运算时默认排除缺失值
# 查找缺失值 | |
df.isnull() | |
# 查找非缺失值 | |
df.notnull() | |
# 删除所有含缺失值的行 | |
df.dropna(how='any') | |
# 用 0 填充缺失值 | |
df.fillna(value=0) |
# 重复值处理
# 查看 DataFrame 数据中的重复值 | |
df.duplicated() | |
# 统计 DataFrame 数据中重复值的个数 | |
df.duplicated().sum() | |
# 删除 DataFrame 数据中的重复值 | |
df.drop_duplicates() |
# 索引变换
# 重置索引 | |
df.reset_index() | |
# 将现有的列设为索引 | |
df.set_index('column_name') | |
# 修改索引与列标签 | |
df.reindex(index=index_labels, columns=column_labels) # 方法一 | |
df.rename(index=index_labels, columns=column_labels) # 方法二 |
# 排序
# 按索引排序 | |
df.sort_index() | |
# 按行列的值排序 | |
df.sort_values() | |
# 按某一列排序 | |
df.sort_values(by='column_name') | |
# 按多列排序 | |
df.sort_values(by=['column_name_1', 'column_name_2']) |
特别地,如果数据含有空值,可以用 na_position
参数处理空值,例如:
df.sort_values(na_position='first') |
# 特征处理
按照数据的值进行离散化 | |
pd.cut() | |
# 按照数据的数量进行离散化 | |
pd.qcut() | |
# 替换数据值 | |
df.replace() | |
# 替换数据值 | |
df.map() | |
# one-hot 编码 | |
pd.get_dummies() |
具体用法请参考 pandas Document
# 数据拼接
# 既可以横向拼接,又可以纵向拼接 | |
pd.concat() | |
# 横向拼接 | |
pd.merge() | |
# 横向拼接 DataFrame 对象 | |
df.join() | |
# 纵向拼接 DataFrame 对象 | |
df.append() |
Merge, join, concatenate and compare
# 数据分组
- 分割:按条件把数据分割成多组
- 应用:为每组单独应用函数
- 组合:将处理结果组合成一个数据结构
具体请参考:Groupby API