Python 中的 Pandas 是一个强大的数据分析和处理库,提供了大量功能来处理结构化数据。Pandas 的设计旨在易于使用,同时也是功能强大的,适合从简单的数据分析到复杂的数据操作。本文主要介绍Python Pandas 中基本概念。

1、DataFrame 和 Series 的基本概念

DataFrame 和 Series 是Pandas中两种最基本的数据结构,它们为数据分析和处理提供了强大的功能。

Series 是一种一维数组结构,类似于 Python 中的列表或者 NumPy 的数组。每个 Series 对象都有一个索引(Index),用于访问其中的元素。每个 Series 可以包含不同类型的对象(整数、字符串、浮点数等)。索引是自动分配的,但也可以自定义。支持向量化操作,类似于 NumPy。可以从字典、列表或其他序列类型创建。

DataFrame 是一个二维的、表格型的数据结构,可以看作是多个 Series 的集合,或者是一个共享同一索引的 Series 对象的字典。每列可以是不同的数据类型(数值型、字符串、布尔值等)。既有行索引也有列索引。可以从多种数据源创建,如字典、二维数组、一个 Series 的字典、另一个 DataFrame 等。支持复杂的数据操作,如数据合并、重塑、分组、排序、时间序列处理等。

可以将 DataFrame 看作是 Series 对象的集合。如选择 DataFrame 的一列,结果是一个 Series。

2、不同的数据源读取数据

Python Pandas 提供了多种方法来从不同数据源读取数据,包括 CSV、Excel、SQL 数据库、JSON、HTML、HDF5、Parquet、Stata、SAS、Google BigQuery、Feather、ORC 和 Clipboard等,如下,

import pandas as pd
import sqlalchemy

# 从 CSV 文件读取
df_csv = pd.read_csv('/cjavapy/file.csv')

# 从 Excel 文件读取
# 需要安装 'openpyxl' 或 'xlrd'
df_excel = pd.read_excel('/cjavapy/file.xlsx')

# 从 SQL 数据库读取
# 需要安装 'sqlalchemy'
engine = sqlalchemy.create_engine('database_url')
df_sql = pd.read_sql("SELECT * FROM your_table", engine)

# 从 JSON 文件读取
df_json = pd.read_json('/cjavapy/file.json')

# 从 HTML 表格读取
# 这将返回一个包含所有表格的列表
df_html_list = pd.read_html('/cjavapy/file.html')
# 选择第一个表格
df_html = df_html_list[0]

# 打印读取到的 DataFrame 结构信息
print("CSV DataFrame:", df_csv.head())
print("Excel DataFrame:", df_excel.head())
print("SQL DataFrame:", df_sql.head())
print("JSON DataFrame:", df_json.head())
print("HTML DataFrame:", df_html.head())

3、查看和检查数据

可以使用 head() 和 tail() 方法分别查看数据集的前几行和最后几行,默认显示 5 行,info() 方法提供数据集的结构信息,包括每列的数据类型和非空值数量,而 describe() 方法则提供数据的统计摘要,如均值、标准差等,对于数值型列是默认的,但也可以包括所有列。

import pandas as pd

# 假设 df 是一个已经加载的 DataFrame
# 示例数据
data = {
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50],
    'C': ['a', 'b', 'c', 'd', 'e']
}
df = pd.DataFrame(data)

# 查看前 5 行
print("显示前 5 行:")
print(df.head())

# 查看后 3 行
print("\n显示后 3 行:")
print(df.tail(3))

# 获取 DataFrame 的基本信息
print("\nDataFrame 的基本信息:")
df.info()

# 获取数值列的统计摘要
print("\n数值列的统计摘要:")
print(df.describe())

# 获取包括所有列的统计摘要
print("\n包括所有列的统计摘要:")
print(df.describe(include='all'))