Skip to content

数据类型转换

正确的数据类型对于数据分析和内存优化至关重要。

查看数据类型

python
import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [1.5, 2.5, 3.5],
    'C': ['a', 'b', 'c'],
    'D': [True, False, True]
})

# 查看数据类型
print(df.dtypes)

# 查看详细信息
print(df.info())

数值类型转换

python
df = pd.DataFrame({
    '整数': [1, 2, 3],
    '浮点数': [1.5, 2.5, 3.5],
    '字符串数字': ['1', '2', '3']
})

# 转换为整数
df['整数'] = df['整数'].astype(int)

# 转换为浮点数
df['浮点数'] = df['浮点数'].astype(float)

# 字符串转数值
df['字符串数字'] = pd.to_numeric(df['字符串数字'])

print(df.dtypes)

字符串类型转换

python
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [1.5, 2.5, 3.5]
})

# 转换为字符串
df['A_str'] = df['A'].astype(str)
df['B_str'] = df['B'].astype(str)

print(df.dtypes)

日期时间转换

python
df = pd.DataFrame({
    '日期字符串': ['2024-01-01', '2024-02-01', '2024-03-01'],
    '时间戳': [1704067200, 1706745600, 1709251200]
})

# 字符串转日期
df['日期'] = pd.to_datetime(df['日期字符串'])

# 时间戳转日期
df['日期从时间戳'] = pd.to_datetime(df['时间戳'], unit='s')

print(df.dtypes)
print(df)

类别类型转换

python
df = pd.DataFrame({
    '类别': ['A', 'B', 'A', 'C', 'B', 'A']
})

# 转换为类别类型
df['类别'] = df['类别'].astype('category')
print(df.dtypes)

# 查看类别
print(df['类别'].cat.categories)

# 重命名类别
df['类别'] = df['类别'].cat.rename_categories({'A': '优秀', 'B': '良好', 'C': '及格'})
print(df)

布尔类型转换

python
df = pd.DataFrame({
    '是/否': ['是', '否', '是'],
    '数值': [1, 0, 1],
    '字符串': ['True', 'False', 'True']
})

# 映射转换为布尔值
df['是/否'] = df['是/否'].map({'是': True, '否': False})

# 数值转布尔值
df['数值'] = df['数值'].astype(bool)

print(df.dtypes)

内存优化

python
df = pd.DataFrame({
    '小整数': [1, 2, 3, 4, 5],
    '大整数': [1000000, 2000000, 3000000],
    '小数': [1.5, 2.5, 3.5]
})

# 查看内存使用
print(df.memory_usage(deep=True))

# 优化整数类型
df['小整数'] = df['小整数'].astype('int8')
df['大整数'] = df['大整数'].astype('int32')

# 优化浮点数类型
df['小数'] = df['小数'].astype('float32')

print(df.dtypes)
print(df.memory_usage(deep=True))

处理转换错误

python
df = pd.DataFrame({
    '数值': ['1', '2', 'abc', '4']
})

# 忽略错误
df['数值_忽略'] = pd.to_numeric(df['数值'], errors='ignore')

# 强制转换,错误设为NaN
df['数值_强制'] = pd.to_numeric(df['数值'], errors='coerce')

print(df)

合理的数据类型转换可以提高代码效率并减少内存占用。