python中pandas的简单介绍

简单介绍一下 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 等读取函数,它们都具有类似的参数设置。

在读取数据之后,我们还需要对数据进行查看或浏览。常用的方法有:

  • head(n):查看 DataFrame 的前 n 行
  • tail(n):查看 DataFrame 的后 n 行
  • info():查询 DataFrame 的基本信息,包括各列数据类型、非空数据行数等
  • describe():查看 DataFrame 的描述性统计信息,包括计数、均值、标准差、四分数等

数据清洗

数据清洗是指对数据进行预处理,主要包括缺失值(NaN)的处理、重复行的删除、异常值(outlier)的剔除、数据类型的转换等。

Pandas 提供了多种方法对数据进行清洗,如下所示:

  • dropna():删除含有 NaN 的行或列
  • fillna():用指定值替换 NaN
  • drop_duplicates():删除重复行
  • replace():替换值
  • str.extract():从指定列中提取字符串

例如,对包含 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 提供了多种数据分组、聚合、过滤及变换方法,下面是一些常用的操作:

  • groupby():根据某一列对 DataFrame 进行分组
  • agg():对分组后的 DataFrame 进行聚合计算
  • sum():计算指定列的和
  • mean():计算指定列的均值
  • count():计算指定列的非空元素个数
  • max():计算指定列的最大值
  • min():计算指定列的最小值
  • filter():根据某一列的值来过滤 DataFrame
  • transform():对分组后的 DataFrame 进行变换

例如,我们先读取一个包含年份、月份、收入、支出的数据集,然后对该数据集进行分组、聚合和变换:

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 提供了多种方法对数据进行合并和连接,主要包括:

  • concat():沿轴方向连接多个 pandas 对象(DataFrame 或 Series)
  • merge():SQL 风格的数据库操作,可指定连接的方式和连接键
  • join():基于索引值的连接方式

例如,我们读取两个包含学生信息和成绩信息的数据集,然后对它们进行连接:

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。

你可能感兴趣的:(pandas,python,数据分析)