机器学习之Pandas(数据清洗,数据转换,数据过滤)
数据清洗,数据转换,数据过滤,科学计算
·
Pandas库是Python中专为数据分析而设计的一款强大且灵活的开源库,它建立在NumPy之上,提供了高效且易于使用的数据结构以及数据分析工具。Pandas的主要目标是简化数据清洗和预处理工作,并为统计建模、可视化以及其他复杂的数据分析流程提供便利。以下是对Pandas库的详细介绍:
主要数据结构:
-
Series:
- Series是Pandas提供的类似于一维数组的对象,但每个元素都有一个关联的标签(称为索引)。它可以包含任何数据类型(整数、字符串、浮点数等),并且具有高度优化的标签化索引功能。
-
DataFrame:
- DataFrame是Pandas的核心数据结构,它是二维的表格型数据结构,类似于电子表格或SQL表。DataFrame可以容纳多个Series,每列可以有不同的数据类型,且每列都有自己的标签(列名),同时每行也有对应的索引。
关键特性:
-
高性能:
- Pandas构建在C库之上,如NumPy,以实现快速的数据处理和分析。
-
数据清洗:
- 提供丰富的数据清洗功能,例如处理缺失值(fillna, dropna)、重复值检测(duplicated, drop_duplicates)和数据类型转换(astype)。
-
数据操作:
- 强大的数据操作方法,包括但不限于合并、重塑(pivot, melt)、选择(loc, iloc, ix)、过滤(布尔索引)和排序。
-
分组和聚合:
groupby函数允许对数据进行分组,并能在每个组上执行聚合操作,如求和、均值、中位数等。
-
时间序列处理:
- 内置对时间序列数据的支持,包括日期解析、频率转换和滚动窗口统计等。
-
文件读写:
- 支持多种文件格式的读写,如CSV、Excel、SQL数据库、HDF5、JSON、HTML等。
-
统计分析:
- 提供一系列描述性统计方法,可以方便地计算单列或多列的统计指标。
示例:
import pandas as pd
# 创建一个简单的Series
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=['a', 'b', 'c', 'd', 'e', 'f'])
print(s)
# 创建一个DataFrame
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'Salary': [50000, 60000, 70000]
})
print(df)
# 数据操作
df['NewColumn'] = df['Age'] * 2 # 添加新列
filtered_df = df[df['Age'] > 30] # 过滤行
# 分组和聚合
grouped = df.groupby('Age').sum() # 按年龄分组并求工资总和
# 时间序列操作
ts = pd.date_range(start='1/1/2020', periods=10) # 创建时间序列索引
df_ts = pd.DataFrame({'Values': range(10)}, index=ts) # 创建含时间序列索引的DataFrame
resampled_df = df_ts.resample('M').mean() # 按月进行数据重采样并计算平均值
Pandas库的使用涉及到大量的数据处理、分析和操作功能,以下是一些关键功能的详细示例:
创建DataFrame和Series
import pandas as pd
# 创建一个简单的Series
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s)
# 创建一个DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
print(df)
读取数据
# 从CSV文件读取数据
df_from_csv = pd.read_csv('data.csv')
# 从Excel文件读取数据
df_from_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 从数据库读取数据(假设已经连接好数据库引擎)
sql_query = "SELECT * FROM my_table"
df_from_sql = pd.read_sql_query(sql_query, con=my_engine)
数据操作
# 新增列
df['Income'] = [50000, 60000, 70000]
# 修改列值
df['Age'] += 1 # 所有年龄增加1岁
# 选择特定列
selected_columns = df[['Name', 'Age']]
# 基于条件筛选行
mask = df['Age'] > 30
older_people = df[mask]
# 排序
sorted_df = df.sort_values(by='Age', ascending=False)
# 删除重复行
unique_df = df.drop_duplicates(subset=['Name'])
分组和聚合
# 对数据进行分组并计算各组的统计指标
grouped = df.groupby('City').agg({'Age': ['min', 'max', 'mean'], 'Income': 'sum'})
# 转换数据透视表
pivot_table = df.pivot_table(values='Income', index='City', columns='Gender')
时间序列操作
# 创建一个时间序列索引的DataFrame
date_index = pd.date_range(start='2020-01-01', periods=12, freq='M')
ts_data = pd.DataFrame({'Sales': range(12)}, index=date_index)
# 重新采样数据(例如,按季度平均)
quarterly_sales = ts_data.resample('Q').mean()
# 对时间序列数据填充缺失值
filled_data = ts_data.fillna(method='ffill') # 使用前向填充
合并和连接数据
# 将两个DataFrame按照共同的列合并
df1 = pd.DataFrame(...some data...)
df2 = pd.DataFrame(...other data...)
merged_df = pd.merge(df1, df2, on='common_column')
# 或者直接连接(concatenate)
combined_df = pd.concat([df1, df2], axis=0, ignore_index=True) # 横向堆叠(行方向)
以上仅为Pandas库的部分基础功能和操作示例,实际应用中还包括更复杂的数据清洗、数据转换、数据过滤等操作。Pandas的强大之处在于它能便捷高效地处理各种结构化数据,为后续的数据分析、模型构建等工作打下坚实基础。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)