Python中Pandas的DataFrame与Series简介

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 进行有效的数据分析至关重要。