pandas模块进阶与DataFrame核心操作解析
Series数据结构操作
创建一个包含数值的序列对象:
data_series = pd.Series([11, 22, 33, 44])
通过标签添加新元素:
data_series['a'] = 88
使用索引获取特定值:
data_series.loc['a'] # 输出:88
删除指定位置的数据:
del data_series[0]
算术运算方法
支持多种数学操作,如加、减、乘、除:
sr1 = pd.Series([12, 23, 34])
sr2 = pd.Series([11, 20, 10, 14])
# 使用add方法进行加法运算
sr1.add(sr2, fill_value=0)
DataFrame数据结构详解
DataFrame是二维表格型数据容器,可视为共享索引的Series集合。
构建方式示例:
# 从字典创建
pd.DataFrame({'col1': [1, 2, 3], 'col2': [4, 5, 6]})
# 使用数组和自定义行列标签
pd.DataFrame(np.array([[10, 20], [30, 40]]), index=['r1', 'r2'], columns=['c1', 'c2'])
常用属性与操作
df = pd.DataFrame([np.arange(10, 20), np.arange(30, 40)])
# 查看行索引
df.index
# 查看列名
df.columns
# 转置矩阵
df.T
# 获取底层数值数组
df.values
# 快速统计摘要
df.describe()
外部数据读取方法
支持多种格式的数据导入:
pd.read_csv():读取文本或CSV文件pd.read_excel():加载Excel文件pd.read_sql():连接数据库查询数据pd.read_html():提取网页中的表格内容
CSV文件读取参数说明
pd.read_csv(
filepath_or_buffer='data.txt',
sep=' ', # 分隔符设置为空格
header=None, # 无表头
names=['id', 'name', 'gender', 'salary'], # 自定义列名
converters={'id': str}, # 类型转换
encoding='utf-8', # 编码处理
skiprows=0, # 跳过前几行
thousands='&', # 千分位符号
usecols=['id', 'name'] # 仅读取部分列
)
Excel文件读取配置
pd.read_excel(
io='data.xlsx',
header=None,
names=['ID', 'name', 'age'],
converters={'ID': str}
)
数据库连接与查询
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='111',
database='b1',
charset='utf8',
autocommit=True
)
# 执行SQL查询并返回DataFrame
pd.read_sql('SELECT * FROM t1', con=conn)
网页表格抓取
pd.read_html('https://baike.baidu.com/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192?fr=aladdin')[0]
数据概览与基本信息
df = pd.DataFrame([np.arange(10, 20), np.arange(30, 40), np.arange(50, 60)])
# 查看列名
df.columns
# 显示前几行
df.head(1)
# 数据类型信息
df.dtypes
# 行列数量
df.shape
行列管理操作
列访问与修改
df['column_name'] # 获取单列
df[['col1', 'col2']] # 获取多列
重命名列名
df.rename(columns={'old_name': 'new_name'})
新增列
df['new_column'] = 2 # 常量赋值
df['start_date'] = df['age'] - df['worktime'] # 基于现有列计算
插入列至指定位置
df.insert(3, 'country', 'CN')
追加行数据
df_new = df.append(new_row_data)
删除行或列
df.drop(index='row_label', axis=0) # 删除行
df.drop(columns=['col1', 'col2'], axis=1) # 删除列
条件筛选与数据过滤
data = pd.read_excel('house_data.xlsx')
# 筛选有电梯且总价低于750万的房屋
filtered_data = data.loc[
(data['配备电梯'] == '有') & (data['总价'] < 750),
['房屋名称', '总价', '房屋朝向']
]
数据清洗与类型转换
日期格式标准化
data.year = pd.to_datetime(data.year, format='%Y年%m月')
去除单位并转为数值型
data.salary = data.salary.str[:-1].astype(float)