Pandas是一个广泛使用的用于数据分析的Python库,它提供了两种基本的数据结构: Series和DataFrame。这些结构是处理和检查数据的有效工具,但它们具有不同的功能和应用程序。
什么是Pandas?
Pandas 是一个流行的 Python 开源数据操作和分析库。它提供了易于使用的数据结构,例如 DataFrame 和 Series,旨在使结构化数据的处理变得快速、简单且富有表现力。 Pandas 广泛应用于数据科学、机器学习和数据分析中,用于执行数据清理、转换和探索等任务。
Pandas Series 是什么?
Pandas Series 是一个类似一维数组的对象,可以保存任何类型的数据(整数、浮点数、字符串等)。它是有标签的,这意味着每个元素都有一个称为索引的唯一标识符。您可以将系列视为电子表格中的一列或数据库表中的单个列。系列是 Pandas 中的基本数据结构,通常用于数据操作和分析任务。它们可以从列表、数组、字典和现有的 Series 对象创建。 Series 也是更复杂的 Pandas DataFrame 的构建块,它是由多个 Series 对象组成的二维表状结构。
从列表、字典和自定义索引创建系列数据结构:
import pandas as pd
#从列表初始化Series data = [1, 2, 3, 4, 5] series_from_list = pd.Series(data) print(series_from_list)
#从字典初始化Series data = {'a': 1, 'b': 2, 'c': 3} series_from_dict = pd.Series(data) print(series_from_dict)
# 使用自定义索引初始化Series data = [1, 2, 3, 4, 5] index = ['a', 'b', 'c', 'd', 'e'] series_custom_index = pd.Series(data, index=index) print(series_custom_index)
Output:
0 1 1 2 2 3 3 4 4 5 dtype: int64 a 1 b 2 c 3 dtype: int64 a 1 b 2 c 3 d 4 e 5 dtype: int64
|
Series 数据结构的主要特点:
索引:
Series 中的每个元素都有一个相应的索引,可用于访问或操作数据。
print(series_from_list[0]) print(series_from_dict['b'])
|
矢量化运算:
Series支持向量化运算,让您可以高效地对整个系列进行算术运算。
series_a = pd.Series([1, 2, 3]) series_b = pd.Series([4, 5, 6]) sum_series = series_a + series_b print(sum_series)
|
对齐一致:
当在两个Series对象之间执行操作时,Pandas会根据索引标签自动对齐数据。
series_a = pd.Series([1, 2, 3], index=['a', 'b', 'c']) series_b = pd.Series([4, 5, 6], index=['b', 'c', 'd']) sum_series = series_a + series_b print(sum_series)
|
NaN 处理:
由 NaN(非数字)表示的缺失值可以在 Series 运算中得到妥善处理。
series_a = pd.Series([1, 2, 3], index=['a', 'b', 'c']) series_b = pd.Series([4, 5], index=['b', 'c']) sum_series = series_a + series_b print(sum_series)
|
什么是 Pandas DataFrame ?
Pandas DataFrame 是一种包含行和列的二维表格数据结构。它类似于关系数据库中的电子表格或表格。 DataFrame 具有三个主要组件: 数据,以行和列的形式存储;由索引标记的行;以及带有标签并包含实际数据的列。
从列表、字典创建数据框
import pandas as pd
# Initializing a DataFrame from a dictionary data = {'Name': ['John', 'Alice', 'Bob'], 'Age': [25, 30, 35], 'City': ['New York', 'Los Angeles', 'Chicago']} df = pd.DataFrame(data) print(df)
# Initializing a DataFrame from a list of lists data = [['John', 25, 'New York'], ['Alice', 30, 'Los Angeles'], ['Bob', 35, 'Chicago']] columns = ['Name', 'Age', 'City'] df = pd.DataFrame(data, columns=columns) print(df)
|
输出:
Name Age City 0 John 25 New York 1 Alice 30 Los Angeles 2 Bob 35 Chicago Name Age City 0 John 25 New York 1 Alice 30 Los Angeles 2 Bob 35 Chicago
|
DataFrame数据结构的主要特征:
索引:
DataFrame 提供灵活的索引选项,允许基于标签或整数位置访问行、列或单个元素。
#访问列 print(df['Name'])
# 按标签访问一行 print(df.loc[0])
# 按整数位置访问一行 print(df.iloc[0])
# 访问单个元素 print(df.at[0, 'Name'])
|
列操作:
DataFrame 中的列是 Series 对象,支持算术运算、过滤和排序等各种操作。
# Adding a new column df['Salary'] = [50000, 60000, 70000]
#根据条件筛选行 high_salary_employees = df[df['Salary'] > 60000] print(high_salary_employees)
#按列对 DataFrame 排序 sorted_df = df.sort_values(by='Age', ascending=False) print(sorted_df)
|
缺失数据处理:
DataFrame 提供了处理缺失值或 NaN 值的方法,包括删除或填充缺失值。
# 删除缺失值的行 df.dropna() print(df)
#用指定值填补缺失值 df.fillna(0) print(df)
|
分组和聚合:
DataFrame 支持用于汇总数据和应用聚合函数的分组操作。
#按列分组并计算平均数 avg_age_by_city = df.groupby('City')['Age'].mean() print(avg_age_by_city)
|
结论
总之,Pandas 提供了两种重要的数据结构:Series 和 DataFrame,每种结构都针对特定的数据操作任务量身定制。 Series 擅长通过高效的索引和矢量化操作处理一维标记数据,而 DataFrame 则提供表格数据组织,具有多功能索引、列操作和对缺失数据的稳健处理。了解它们的差异对于使用 Python 进行有效的数据分析至关重要。