简单介绍一下 Pandas 的常用功能和操作方法
Pandas 支持多种数据格式的读取,常用的有 CSV、Excel、SQL 数据库、TXT、JSON、HTML 等。其中,读取 CSV 和 Excel 数据最为常见。在读取数据时,需要指定数据源的路径或连接字符串,还需指定数据的分隔符(CSV)、工作表名(Excel)、表名(SQL),以及其他的参数,比如行索引(index_col)、编码方式(encoding)、日期解析方式(parse_dates)等等。
我们读取一个 CSV 文件的例子:
import pandas as pd
df = pd.read_csv('/path/to/csv/file.csv', sep=',', index_col=0)
使用 read_csv 函数读取 CSV 文件,第一个参数为文件的路径,sep 参数可指定分隔符,默认为逗号,因此可以省略。index_col 参数为整数类型,指定的列在 DataFrame 中被作为索引列使用,它默认为 None,即未指定时,将在 DataFrame 中加入整数索引。
除了 read_csv 函数外,还有 read_excel、read_sql、read_table、read_json、read_html 等读取函数,它们都具有类似的参数设置。
在读取数据之后,我们还需要对数据进行查看或浏览。常用的方法有:
数据清洗是指对数据进行预处理,主要包括缺失值(NaN)的处理、重复行的删除、异常值(outlier)的剔除、数据类型的转换等。
Pandas 提供了多种方法对数据进行清洗,如下所示:
例如,对包含 NaN 的数据进行清洗:
df = df.dropna() # 删除所有含有 NaN 数据的行
df.fillna(0, inplace=True) # 将 NaN 替换为 0
df.replace({'male': 0, 'female': 1}, inplace=True) # 将 male/female 用 0/1 替换
另外,可以使用正则表达式从字符串类型的数据中提取信息:
df['year'] = df['date'].str.extract('(\d{4}-\d{1,2}-\d{1,2})', expand=False)
在上述代码中,我们提取了 date 列中的年份信息,并将其赋值给 year 列。这里的 \d{n} 表示匹配 n 个数字,{m,n} 表示匹配 m~n 个数字。
Pandas 提供了多种数据分组、聚合、过滤及变换方法,下面是一些常用的操作:
例如,我们先读取一个包含年份、月份、收入、支出的数据集,然后对该数据集进行分组、聚合和变换:
df = pd.read_csv('/path/to/csv/file.csv')
grouped = df.groupby(['year', 'month'])
result = grouped.agg({'income': 'sum', 'expenditure': 'mean'})
result = result.reset_index()
result['income_perc'] = result['income'] / result['income'].sum()
result['expenditure_perc'] = result['expenditure'] / result['expenditure'].max()
首先,利用 groupby 函数对年份和月份进行分组。然后,使用 agg 函数对每个组的数据进行聚合。计算方式为 income 列的和以及 expenditure 列的均值。接下来,调用 reset_index 函数保留年份和月份信息。最后,使用 transform 函数对收入和支出数据进行变换,生成比例数据。其中,income_perc 和 expenditure_perc 分别表示收入和支出的占比。
Pandas 提供了多种方法对数据进行合并和连接,主要包括:
例如,我们读取两个包含学生信息和成绩信息的数据集,然后对它们进行连接:
df1 = pd.read_csv('/path/to/csv/file1.csv')
df2 = pd.read_csv('/path/to/csv/file2.csv')
result = pd.merge(df1, df2, on='student_id')
在上述代码中,我们使用 merge 函数对 df1 和 df2 数据集进行 SQL 风格的连接操作,指定连接键为 student_id。
另外一种连接方式是使用 join 函数:
df1 = pd.read_csv('/path/to/csv/file1.csv', index_col='student_id')
df2 = pd.read_csv('/path/to/csv/file2.csv', index_col='student_id')
result = df1.join(df2, rsuffix='_right')
以上代码中,我们使用 join 函数基于索引进行连接,join 默认使用左外连接。rsuffix 参数表示如果两个 DataFrame 中存在相同的列名,连接时用右侧的列重命名,以避免重名冲突。
在数据分析时,常常需要对数据进行透视,以便更清晰地了解数据的分布情况。Pandas 支持使用 pivot_table 函数对数据进行透视。
下面是一个基本的例子:
df = pd.read_csv('/path/to/csv/file.csv')
result = pd.pivot_table(df, values='value', index='year', columns='category')
我们读取了一个包含年份、类别、数值的数据集。然后,使用 pivot_table 函数对数据进行透视,值列为 value,行索引为 year,列为 category。