Python 数据分析:Pandas 处理 CSV 数据的 5 个实用技巧

技巧1:智能推断数据类型

问题:CSV 默认将所有数据读为字符串,导致内存浪费
解决:使用 infer_objects() 自动转换类型

df = pd.read_csv('data.csv').infer_objects()
print(df.dtypes)  # 查看优化后的数据类型

技巧2:高效处理缺失值

场景:包含空值的数据列
方案:组合使用 isna()fillna()

# 统计每列缺失值比例
missing_ratio = df.isna().mean()
print(f"缺失比例: {missing_ratio}")

# 对数值列用中位数填充
df['price'] = df['price'].fillna(df['price'].median())

技巧3:日期解析优化

痛点:日期格式混乱导致分析错误
方案parse_dates 参数配合自定义格式

df = pd.read_csv(
    'sales.csv',
    parse_dates=['order_date'],
    date_parser=lambda x: pd.to_datetime(x, format='%d/%m/%Y')
)

技巧4:分块处理大型文件

场景:内存不足时处理GB级CSV
方案:使用 chunksize 参数迭代读取

chunk_iter = pd.read_csv('big_data.csv', chunksize=50000)
for chunk in chunk_iter:
    # 在每块数据上执行操作
    chunk['discount'] = chunk['price'] * 0.9
    chunk.to_csv('processed.csv', mode='a', header=False)

技巧5:列重命名与筛选

需求:快速调整列名并提取关键字段
方案rename() + 条件过滤

# 批量重命名列
df = df.rename(columns={
    'cust_id': 'customer_id',
    'trans_dt': 'transaction_date'
})

# 筛选特定条件数据
high_value = df.query('revenue > 1000 & region == "East"')

应用示例
# 综合应用五个技巧
chunk_iter = pd.read_csv(
    'sales_data.csv',
    chunksize=20000,
    parse_dates=['date'],
    date_parser=lambda x: pd.to_datetime(x, errors='coerce')
)

for chunk in chunk_iter:
    chunk = chunk.infer_objects()
    chunk = chunk.rename(columns={'amt': 'amount'})
    chunk['amount'] = chunk['amount'].fillna(chunk['amount'].median())
    filtered = chunk.query('amount > 500 & date.dt.year == 2023')
    filtered.to_csv('final_output.csv', mode='a', index=False)

提示:使用 pd.set_option('display.max_columns', None) 可显示所有列,避免预览时重要数据被截断

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐