- 文集信息
- 目录大纲
- 最新文档
- 知识宇宙
文集详情
文集导读
Pandas
Pandas:Python数据分析的瑞士军刀
1. Pandas的核心数据结构:Series和DataFrame
Pandas基于两种主要的数据结构:
-
Series: 一维带标签的数组,类似于NumPy的ndarray,但每个元素都有一个与之关联的标签(索引)。
-
DataFrame: 二维表格型数据结构,可以看作是Series的容器。它由多个Series组成,每个Series代表一列,并且所有列共享相同的索引。
import pandas as pd # 创建Series data = [10, 20, 30, 40, 50] index = ['a', 'b', 'c', 'd', 'e'] s = pd.Series(data, index=index) print("Series:\n", s) # 创建DataFrame data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'], 'Age': [25, 30, 28, 22], 'City': ['New York', 'London', 'Paris', 'Tokyo']} df = pd.DataFrame(data) print("\nDataFrame:\n", df)
2. DataFrame的创建与导入
DataFrame可以通过多种方式创建,包括:
-
字典(如上面的例子)
-
列表的列表
-
NumPy数组
-
其他DataFrame
-
从外部文件(CSV, Excel, SQL数据库等)导入
# 从CSV文件导入 df = pd.read_csv('data.csv') # 假设有一个名为data.csv的文件 # 从Excel文件导入 df = pd.read_excel('data.xlsx', sheet_name='Sheet1') # 从SQL数据库导入 import sqlite3 conn = sqlite3.connect('database.db') df = pd.read_sql_query("SELECT * FROM employees", conn) conn.close()
3. 数据访问与选择
Pandas提供了多种方式来访问和选择DataFrame中的数据:
-
列选择: 使用列名
df['ColumnName']或df.ColumnName -
行选择: 使用
.loc[](基于标签) 或.iloc[](基于位置) -
条件选择: 使用布尔索引
df[df['ColumnName'] > value]
# 选择 'Age' 列 ages = df['Age'] print("Ages:\n", ages) # 选择第一行 (基于位置) first_row = df.iloc[0] print("\nFirst Row:\n", first_row) # 选择 'Name' 为 'Alice' 的行 (基于标签和条件) alice = df.loc[df['Name'] == 'Alice'] print("\nAlice:\n", alice) # 选择 'Age' 大于 25 的所有行 older_than_25 = df[df['Age'] > 25] print("\nOlder than 25:\n", older_than_25)
4. 数据清洗
数据清洗是数据分析的关键步骤,Pandas提供了丰富的功能来处理缺失值、重复值和异常值:
-
处理缺失值:
.isnull(),.notnull(),.dropna(),.fillna() -
处理重复值:
.duplicated(),.drop_duplicates() -
数据类型转换:
.astype()
import numpy as np # 创建包含缺失值的DataFrame data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', None], 'Age': [25, np.nan, 28, 22, 30], 'City': ['New York', 'London', 'Paris', 'Tokyo', 'Sydney']} df = pd.DataFrame(data) # 检测缺失值 print("Missing Values:\n", df.isnull()) # 填充缺失值 df['Age'].fillna(df['Age'].mean(), inplace=True) # 使用平均值填充 df['Name'].fillna('Unknown', inplace=True) # 使用 'Unknown' 填充 print("\nDataFrame after filling missing values:\n", df) # 删除包含缺失值的行 df_cleaned = df.dropna() print("\nDataFrame after dropping missing values:\n", df_cleaned) # 检测重复行 data = {'Name': ['Alice', 'Bob', 'Charlie', 'Alice'], 'Age': [25, 30, 28, 25], 'City': ['New York', 'London', 'Paris', 'New York']} df = pd.DataFrame(data) print("Duplicated Rows:\n", df.duplicated()) # 删除重复行 df_no_duplicates = df.drop_duplicates() print("\nDataFrame after dropping duplicates:\n", df_no_duplicates) #数据类型转换 df['Age'] = df['Age'].astype(int) print("\nDataFrame after type conversion:\n", df.dtypes)
5. 数据转换与操作
Pandas提供了强大的数据转换和操作功能:
-
添加/删除列:
df['NewColumn'] = ...,df.drop('ColumnName', axis=1) -
排序:
.sort_values() -
分组:
.groupby() -
合并:
.concat(),.merge() -
应用函数:
.apply(),.map()
# 添加新列 df['Salary'] = [60000, 70000, 65000, 55000] print("DataFrame with Salary:\n", df) # 删除列 df = df.drop('City', axis=1) print("\nDataFrame after dropping City:\n", df) # 排序 df_sorted = df.sort_values(by='Age', ascending=False) print("\nSorted DataFrame:\n", df_sorted) # 分组 grouped = df.groupby('Name')['Salary'].mean() print("\nGrouped data:\n", grouped) # 应用函数 def increase_salary(salary): return salary * 1.1 df['Salary'] = df['Salary'].apply(increase_salary) print("\nDataFrame after applying function:\n", df) # 合并DataFrame data2 = {'Name': ['Eve', 'Frank'], 'Age': [27, 32], 'Salary': [75000, 80000]} df2 = pd.DataFrame(data2) df_combined = pd.concat([df, df2], ignore_index=True) print("\nCombined DataFrame:\n", df_combined) #合并DataFrame data3 = {'Name': ['Alice', 'Bob', 'Charlie', 'David'], 'Department': ['Sales', 'Marketing', 'Engineering', 'HR']} df3 = pd.DataFrame(data3) df_merged = pd.merge(df, df3, on='Name', how='left') #left, right, inner, outer print("\nMerged DataFrame:\n", df_merged)
6. 数据分析与统计
Pandas提供了丰富的统计函数:
-
.describe(): 描述性统计 -
.mean(),.median(),.std(),.min(),.max(),.count() -
.value_counts(): 统计唯一值出现的次数 -
.corr(): 计算相关系数
# 描述性统计 print("Descriptive Statistics:\n", df.describe()) # 平均年龄 mean_age = df['Age'].mean() print("\nMean Age:", mean_age) # 值计数 city_counts = df['Name'].value_counts() print("\nCity Counts:\n", city_counts) # 相关系数 correlation = df['Age'].corr(df['Salary']) print("\nCorrelation between Age and Salary:", correlation)
7. 使用Mermaid图可视化数据处理流程
可以使用Mermaid图来可视化Pandas数据处理流程,帮助理解各个步骤之间的关系。
8. Pandas的进阶应用
除了以上基础功能,Pandas还有许多高级应用,例如:
-
时间序列数据处理: Pandas对时间序列数据有很好的支持,可以进行时间序列分析和预测。
-
多层索引: DataFrame可以拥有多层索引,方便处理复杂的数据结构。
-
性能优化: Pandas底层使用了NumPy,可以通过向量化操作提高性能。
目录大纲
最新文档
知识宇宙
正在加载知识图谱...