| 方法/操作 | 语法示例 | 描述 |
| 查看数据类型 | df.dtypes | 显示每列的数据类型 |
| 强制类型转换 | df[‘col’].astype(‘int’) | 将列转换为指定类型(如int, float, str, datetime) |
| 转换为日期时间 | pd.to_datetime(df[‘col’]) | 将字符串列转为datetime类型 |
| 转换为分类数据 | df[‘col’].astype(‘category’) | 将列转为分类类型(节省内存,提高性能) |
| 数值格式化 | df[‘col’].round(2) | 保留2位小数 |
核心方法
| 操作 | 方法/函数 | 描述 |
| 查看数据类型 | df.dtypes | 显示每列的数据类型(如int64、float64、object等)。 |
| 强制类型转换 | df[‘col’].astype(‘type’) | 将列转换为指定类型(如int、float、str、bool等)。 |
| 转换为日期时间 | pd.to_datetime(df[‘col’]) | 将字符串或数值列转为datetime类型(支持自定义格式)。 |
| 转换为分类数据 | df[‘col’].astype(‘category’) | 将列转为分类类型(节省内存,提高性能,适用于有限取值的列如性别、省份)。 |
| 数值格式化 | df[‘col’].round(2) | 保留指定小数位数(如2位)。 |
代码案例讲解
1. 查看数据类型
import pandas as pd
# 加载数据(以sleep.csv为例)
df = pd.read_csv("sleep.csv")
print(df.dtypes)
输出示例:
| Plain Text person_id int64 gender object age int64 occupation object sleep_duration float64 sleep_quality float64 … … |
说明:object通常为字符串或混合类型,需检查是否需要转换。
2. 强制类型转换
将数值列转换为整数或字符串:
# 将sleep_duration从float转为int(丢失小数部分)
df['sleep_duration_int'] = df['sleep_duration'].astype('int32')
# 将gender转为字符串
df['gender_str'] = df['gender'].astype('str')
print(df[['sleep_duration', 'sleep_duration_int', 'gender_str']].head())
输出:
| Plain Text sleep_duration sleep_duration_int gender_str 0 7.4 7 Male 1 4.2 4 Female 2 6.1 6 Male |
3. 转换为日期时间
处理时间数据(假设employees.csv有日期列):
# 示例:创建临时日期列(实际数据可能为hire_date)
df_employees = pd.read_csv("employees.csv")
df_employees['fake_date'] = '2023-01-' + df_employees['employee_id'].astype(str).str[:2]
# 转换为datetime
df_employees['fake_date'] = pd.to_datetime(df_employees['fake_date'])
print(df_employees[['employee_id', 'fake_date']].head())
输出:
| Plain Text employee_id fake_date 0 100 2023-01-10 1 101 2023-01-10 2 102 2023-01-10 |
注意:若原始格式非标准,需指定格式参数,如:
pd.to_datetime(df[‘date’], format=’%Y/%m/%d’)
4. 转换为分类数据
优化内存和性能(适用于低基数列):
# 将gender列转为分类类型
df['gender'] = df['gender'].astype('category')
print(df['gender'].dtypes)
输出:
| Plain Text category |
| 优势: 减少内存占用(尤其对重复值多的列)。 加速groupby、sort等操作。 |
5. 数值格式化
控制小数位数:
# 保留sleep_quality的2位小数
df['sleep_quality_rounded'] = df['sleep_quality'].round(2)
print(df[['sleep_quality', 'sleep_quality_rounded']].head())
输出:
| Plain Text sleep_quality sleep_quality_rounded 0 7.0 7.00 1 4.9 4.90 2 6.0 6.00 |
常见问题与技巧
处理转换错误:使用errors=’coerce’将无效值转为NaN,避免报错:
df['age'] = pd.to_numeric(df['age'], errors='coerce')
内存优化:将数值列从int64转为int32或float32:
df['age'] = df['age'].astype('int32')
布尔类型转换:将字符串(如”Yes”/”No”)转为布尔值:
df['is_active'] = df['active_flag'].map({'Yes': True, 'No': False})
自定义格式化:使用apply实现复杂转换(如百分比):
df['score_percent'] = df['score'].apply(lambda x: f"{x*100:.1f}%")
实战案例:处理penguins.csv
df_penguins = pd.read_csv("penguins.csv")
# 1. 转换sex为分类类型
df_penguins['sex'] = df_penguins['sex'].astype('category')
# 2. 补全缺失值后转换bill_length_mm为float32
df_penguins['bill_length_mm'] = df_penguins['bill_length_mm'].fillna(0).astype('float32')
# 3. 检查并输出结果
print(df_penguins[['species', 'sex', 'bill_length_mm']].dtypes)
输出:
| Plain Text species object sex category bill_length_mm float32 |
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END











请登录后查看评论内容