AI机器学习-Pandas
AI机器学习-Pandas
一、为什么使用 Pandas
在商业场景中,数据处理和分析是至关重要的环节。Pandas 作为 Python 中强大的数据处理库,能极大地提升工作效率,以下是几个主要原因:
1. 便捷的数据处理能力
在处理销售数据、客户信息等大量数据时,Pandas 提供了丰富的函数和方法,可以轻松完成数据清洗、筛选、转换等操作。例如,对销售数据进行去重、填充缺失值等操作。
2. 强大的数据结构
Pandas 提供了 Series 和 DataFrame 两种核心数据结构,能够很好地处理一维和二维数据,就像处理电子表格或数据库表一样方便。
3. 高效的文件读写
支持多种文件格式的读写,如 CSV、Excel、JSON、HDF5 等,方便与不同系统进行数据交互。在商业场景中,我们可能需要从不同来源获取数据,Pandas 可以帮助我们轻松处理这些数据。
4. 数据可视化支持
可以与 Matplotlib 等可视化库集成,方便进行数据可视化,直观地展示数据特征和趋势,为决策提供有力支持。
二、Pandas 数据类型
Pandas 是 Python 中用于数据处理和分析的强大库,它主要有两种基本数据类型:Series 和 DataFrame,以下将详细介绍这两种数据类型及其常用方法。
1. Series
1.1 介绍
Series 是一种一维带标签的数组,类似于一维数组或 Python 字典。它可以存储任何数据类型(如整数、浮点数、字符串等),并且每个数据点都有一个与之关联的标签(索引)。
1.2 创建
可以通过多种方式创建 Series,以下是几种常见的创建方式:
import pandas as pd
import numpy as np
# 从列表创建 Series
data_list = [10, 20, 30, 40]
index_list = ['a', 'b', 'c', 'd']
series_from_list = pd.Series(data_list, index=index_list)
print("从列表创建的 Series:")
print(series_from_list)
# 从字典创建 Series
data_dict = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
series_from_dict = pd.Series(data_dict)
print("\n从字典创建的 Series:")
print(series_from_dict)
# 从 NumPy 数组创建 Series
data_np = np.array([10, 20, 30, 40])
series_from_np = pd.Series(data_np, index=index_list)
print("\n从 NumPy 数组创建的 Series:")
print(series_from_np)
1.3 常用属性
- index:获取 Series 的索引。
- values:获取 Series 的值。
- dtype:获取 Series 的数据类型。
print("\nSeries 的索引:", series_from_list.index)
print("Series 的值:", series_from_list.values)
print("Series 的数据类型:", series_from_list.dtype)
1.4 常用方法
- head():返回 Series 的前几行,默认返回前 5 行。
- tail():返回 Series 的后几行,默认返回后 5 行。
- describe():生成 Series 的描述性统计信息,包括计数、均值、标准差等。
- sort_values():按值对 Series 进行排序。
print("\nSeries 的前几行:")
print(series_from_list.head())
print("\nSeries 的后几行:")
print(series_from_list.tail())
print("\nSeries 的描述性统计信息:")
print(series_from_list.describe())
print("\n按值排序后的 Series:")
print(series_from_list.sort_values())
2. DataFrame
2.1 介绍
DataFrame 是一种二维带标签的数据结构,类似于电子表格或 SQL 表。它由多个 Series 组成,每个 Series 代表一列,并且可以有不同的数据类型。
2.2 创建
可以通过多种方式创建 DataFrame,以下是几种常见的创建方式:
import pandas as pd
import numpy as np
# 从字典列表创建 DataFrame
data_dict_list = [
{'Name': 'Alice', 'Age': 25, 'City': 'New York'},
{'Name': 'Bob', 'Age': 30, 'City': 'Los Angeles'},
{'Name': 'Charlie', 'Age': 35, 'City': 'Chicago'}
]
df_from_dict_list = pd.DataFrame(data_dict_list)
print("\n从字典列表创建的 DataFrame:")
print(df_from_dict_list)
# 从字典创建 DataFrame,键为列名,值为列表
data_dict = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df_from_dict = pd.DataFrame(data_dict)
print("\n从字典创建的 DataFrame:")
print(df_from_dict)
# 从 Series 创建 DataFrame
name_series = pd.Series(['Alice', 'Bob', 'Charlie'])
age_series = pd.Series([25, 30, 35])
city_series = pd.Series(['New York', 'Los Angeles', 'Chicago'])
data = {
'Name': name_series,
'Age': age_series,
'City': city_series
}
df_from_series = pd.DataFrame(data)
print("\n从 Series 创建的 DataFrame:")
print(df_from_series)
2.3 常用属性
- index:获取 DataFrame 的行索引。
- columns:获取 DataFrame 的列索引。
- values:获取 DataFrame 的值,返回一个二维 NumPy 数组。
- shape:返回 DataFrame 的行数和列数。
#跟在上面代码后面即可
print("\nDataFrame 的行索引:", df_from_dict.index)
print("DataFrame 的列索引:", df_from_dict.columns)
print("DataFrame 的值:")
print(df_from_dict.values)
print("DataFrame 的形状(行数,列数):", df_from_dict.shape)
2.4 常用方法
2.4.1 索引和选择数据
- loc[]:通过标签索引选择数据。
- iloc[]:通过整数位置索引选择数据。
- []:通过列名选择列。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd'])
#=================loc标签索引===============
# 选取单个元素
print("使用 loc 选取单个元素(行标签为 'b',列标签为 'Age'):")
print(df.loc['b', 'Age'])
# 选取多行多列
print("\n使用 loc 选取多行多列(行标签从 'b' 到 'd',列标签为 'Name' 和 'City'):")
print(df.loc['b':'d', ['Name', 'City']])
# 条件筛选
print("\n使用 loc 进行条件筛选(Age 大于 30 的行,所有列):")
print(df.loc[df['Age'] > 30, :])
#=================iloc整数位置索引===============
# 选取单个元素
print("使用 iloc 选取单个元素(第 1 行,第 1 列):")
print(df.iloc[1, 1])
# 选取多行多列
print("\n使用 iloc 选取多行多列(第 1 行到第 3 行,第 0 列和第 2 列):")
print(df.iloc[1:3, [0, 2]])
# 按照位置范围选取
print("\n使用 iloc 按照位置范围选取(前 2 行,所有列):")
print(df.iloc[:2, :])
#=================[]选择列索引===============
print(df['City'])
2.4.2 数据操作
- drop():删除指定的行或列。
- rename():重命名行索引或列索引。
- sort_values():按指定列的值对 DataFrame 进行排序。
import pandas as pd
# 从字典创建 DataFrame,键为列名,值为列表
data_dict = {
'Name': ['小花', '小雨', '小风'],
'Age': [25, 30, 35],
'City': ['北京', '天津', '上海']
}
df_from_dict = pd.DataFrame(data_dict)
# 删除第一行
df_dropped = df_from_dict.drop(0)
print("\n删除第一行后的 DataFrame:")
print(df_dropped)
# 重命名列名
df_renamed = df_from_dict.rename(columns={'Name': 'Full Name'})
print("\n重命名列名后的 DataFrame:")
print(df_renamed)
# 按 Age 列排序
df_sorted = df_from_dict.sort_values(by='Age')
print("\n按 Age 列排序后的 DataFrame:")
print(df_sorted)
2.4.3 数据统计
- describe():生成 DataFrame 的描述性统计信息。
- mean():计算每列的均值。
- sum():计算每列的总和。
import pandas as pd
# 从字典创建 DataFrame,键为列名,值为列表
data_dict = {
'price': [20, 30, 40],
'Age': [25, 30, 35],
'area': [100, 200, 300]
}
df_from_dict = pd.DataFrame(data_dict)
print("\nDataFrame 的描述性统计信息:")
print(df_from_dict.describe())
print("\n每列的均值:")
print(df_from_dict.mean())
print("\n每列的总和:")
print(df_from_dict.sum())
2.4.4 数据处理
- fillna():填充缺失值。
- dropna():删除包含缺失值的行或列。
import pandas as pd
import numpy as np
# 创建包含缺失值的 DataFrame
data_with_nan = {
'Name': ['小美', '小亮', np.nan],
'Age': [25, np.nan, 35],
'City': ['北京', '天津', '上海']
}
df_with_nan = pd.DataFrame(data_with_nan)
# 填充缺失值
df_filled = df_with_nan.fillna('Unknown')
print("\n填充缺失值后的 DataFrame:")
print(df_filled)
# 删除包含缺失值的行
df_dropped_nan = df_with_nan.dropna()
print("\n删除包含缺失值的行后的 DataFrame:")
print(df_dropped_nan)
2.4.5 排序操作
- sort_values(by=[],ascending=): 通过一个或者多个列值进行排序
import pandas as pd
data = {
'Product': ['ProductA', 'ProductB', 'ProductC', 'ProductD'],
'Sales': [100, 200, 150, 300],
'Price': [10, 20, 15, 30],
'Profit': [20, 40, 30, 60]
}
sales_df = pd.DataFrame(data)# 计算每个产品的销售总额(销售额 = 销售数量 * 价格)
# 按销售额降序排序
sorted_df = sales_df.sort_values(by='Sales', ascending=False)
print("按销售额降序排序后的 DataFrame:")
print(sorted_df)
三、DataFrame 运算
1. 算术运算
在计算销售总额、平均价格等指标时,需要进行算术运算。
import pandas as pd
# 创建一个销售数据的 DataFrame
data = {
'Product': ['ProductA', 'ProductB', 'ProductC', 'ProductD'],
'Sales': [100, 200, 150, 300],
'Price': [10, 20, 15, 30],
'Profit': [20, 40, 30, 60]
}
sales_df = pd.DataFrame(data)# 计算每个产品的销售总额(销售额 = 销售数量 * 价格)
sales_df['TotalSales'] = sales_df['Sales'] * sales_df['Price']
print("添加销售总额列后的 DataFrame:")
print(sales_df)
2. 逻辑运算
筛选出销售额大于 200 的产品。
#跟在上面代码后面即可
# 筛选销售额大于 200 的产品
filtered_df = sales_df[sales_df['Sales'] > 200]
print("销售额大于 200 的产品:")
print(filtered_df)
3. 统计运算
计算销售数据的统计指标,如平均值、最大值、最小值等。
#跟在上面代码后面即可
# 计算销售数据的统计指标
stats = sales_df[['Sales', 'Price', 'Profit']].describe()
print("销售数据的统计指标:")
print(stats)
4. 自定义运算
使用 apply 方法对数据进行自定义运算,例如计算每个产品的利润率。
#跟在上面代码后面即可
# 自定义函数计算利润率
def calculate_profit_margin(row):
return row['Profit'] / (row['Sales'] * row['Price'])
sales_df['ProfitMargin'] = sales_df.apply(calculate_profit_margin, axis=1)
print("添加利润率列后的 DataFrame:")
print(sales_df)
四、Pandas 画图
在商业分析中,数据可视化可以帮助我们更直观地理解数据。Pandas 可以方便地与 Matplotlib 集成进行数据可视化。
想要修改图的类型直接修改kind即可,直接通过英文可选择图
import matplotlib.pyplot as plt
import pandas as pd
# 创建一个销售数据的 DataFrame
data = {
'Product': ['ProductA', 'ProductB', 'ProductC', 'ProductD'],
'Sales': [100, 200, 150, 300],
'Price': [10, 20, 15, 30],
'Profit': [20, 40, 30, 60]
}
sales_df = pd.DataFrame(data)
# 绘制销售数据的柱状图
sales_df.plot(x='Product', y='Sales', kind='bar', title='Product Sales')
plt.xlabel('Product')
plt.ylabel('Sales')
plt.show()
# 绘制利润率的折线图
sales_df.plot(x='Product', y='ProfitMargin', kind='line', title='Product Profit Margin')
plt.xlabel('Product')
plt.ylabel('Profit Margin')
plt.show()
五、文件读取与存储
在商业场景中,我们需要从不同的文件中读取数据,并将处理后的数据保存到文件中。
1. CSV 文件读写
import pandas as pd
# 创建一个销售数据的 DataFrame
data = {
'Product': ['ProductA', 'ProductB', 'ProductC', 'ProductD'],
'Sales': [100, 200, 150, 300],
'Price': [10, 20, 15, 30],
'Profit': [20, 40, 30, 60]
}
sales_df = pd.DataFrame(data)
# 保存 DataFrame 到 CSV 文件
sales_df.to_csv('sales_data.csv', index=False)
# 从 CSV 文件中读取数据
new_sales_df = pd.read_csv('sales_data.csv')
print("从 CSV 文件中读取的数据:")
print(new_sales_df)
2. Excel 文件读写
这里需要引入openpyxl依赖,否则报错:ModuleNotFoundError: No module named ‘openpyxl’
import openpyxl
import pandas as pd
# 创建一个销售数据的 DataFrame
data = {
'Product': ['ProductA', 'ProductB', 'ProductC', 'ProductD'],
'Sales': [100, 200, 150, 300],
'Price': [10, 20, 15, 30],
'Profit': [20, 40, 30, 60]
}
sales_df = pd.DataFrame(data)
# 保存 DataFrame 到 Excel 文件
sales_df.to_excel('sales_data.xlsx', index=False)
# 从 Excel 文件中读取数据
new_sales_df_excel = pd.read_excel('sales_data.xlsx')
print("从 Excel 文件中读取的数据:")
print(new_sales_df_excel)
六、高级处理
1. 缺失值处理
在实际数据中,经常会存在缺失值。Pandas 提供了多种方法来处理缺失值。
import pandas as pd
import numpy as np
# 创建包含缺失值的 DataFrame
data_with_nan = {
'Product': ['ProductA', 'ProductB', 'ProductC', 'ProductD'],
'Sales': [100, np.nan, 150, 300],
'Price': [10, 20, np.nan, 30],
'Profit': [20, 40, 30, np.nan]
}
nan_df = pd.DataFrame(data_with_nan)
print("包含缺失值的 DataFrame:")
print(nan_df)
# 删除包含缺失值的行
cleaned_df = nan_df.dropna()
print("删除缺失值后的 DataFrame:")
print(cleaned_df)
# 获取类型是数字的列
numeric_columns = nan_df.select_dtypes(include=[np.number]).columns
# 填充缺失值为平均值
filled_df = nan_df.fillna(nan_df[numeric_columns].mean())
print("填充缺失值后的 DataFrame:")
print(filled_df)
2. 数据离散化
在市场细分等场景中,我们可能需要将连续的数据离散化。
**什么是离散化:**连续属性的离散化就是在连续属性的值域上,将值域划分为若⼲个离散的区间,最后⽤不同的符号或整数 值代表落在每个⼦区间中的属性值。
**为什么要离散化:**数据离散化技术可以⽤来减少给定连 续属性值的个数
import pandas as pd
# 创建一个销售数据的 DataFrame
data = {
'Product': ['ProductA', 'ProductB', 'ProductC', 'ProductD'],
'Sales': [100, 200, 150, 300],
'Price': [10, 20, 15, 30],
'Profit': [20, 40, 30, 60]
}
sales_df = pd.DataFrame(data)
# 将销售数据进行离散化
bins = [0, 150, 250, 350]
labels = ['Low', 'Medium', 'High']
sales_df['SalesCategory'] = pd.cut(sales_df['Sales'], bins=bins, labels=labels)
print("添加销售类别列后的 DataFrame:")
print(sales_df)
3. 合并数据
在分析多个数据源时,需要将不同的 DataFrame 进行合并。
import pandas as pd
# 创建一个销售数据的 DataFrame
data = {
'Product': ['ProductA', 'ProductB', 'ProductC', 'ProductD'],
'Sales': [100, 200, 150, 300],
'Price': [10, 20, 15, 30],
'Profit': [20, 40, 30, 60]
}
sales_df = pd.DataFrame(data)
# 创建另一个 DataFrame
data2 = {
'Product': ['ProductA', 'ProductB', 'ProductC', 'ProductD'],
'Region': ['North', 'South', 'East', 'West']
}
region_df = pd.DataFrame(data2)
# 合并两个 DataFrame
merged_df = pd.merge(sales_df, region_df, on='Product')
print("合并后的 DataFrame:")
print(merged_df)
4. 分组与聚合
在分析不同颜色、价格的情况时,需要进行分组与聚合操作。
import pandas as pd
col = pd.DataFrame(
{'color': ['white', 'red', 'green', 'red', 'green'],
'object': ['pen', 'pencil', 'pencil', 'ashtray', 'pen'],
'price1': [5.56, 4.20, 1.30, 0.56, 2.75],
'price2': [4.75, 4.12, 1.60, 0.75, 3.15]})
print(col)
# 按颜色分组,计算每个price1的平均值
# 语法一
print(col.groupby(["color"])["price1"].mean())
# 语法二
print(col["price1"].groupby(col["color"]).mean())
# 计算分组有几种颜色
count = col.groupby(["color"]).count()
print(f"颜色种类是:{count}")
# 计算分组后各组price1和
sumPrice = col.groupby(["color"])["price1"].sum()
print(f"分组后各组price1和:{sumPrice}")
通过以上学习,可以掌握 Pandas的基本操作,在数据分析中灵活运用 Pandas 处理和分析数据
喜欢那就别犹豫啦,赶紧点赞👍 收藏🌟 加关注👀 吧!后续仍然会持续分享相关内容哦!!!!
更多推荐

所有评论(0)