学习pandas遇到的坑(一)

本文探讨了CSV文件的不同编码格式及其对Python中pandas库read_csv函数的影响。详细介绍了如何使用codecs模块批量转换CSV文件编码至UTF-8,以便统一处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

read_csv读取的csv文件编码格式的问题:

read_csv函数enconding参数的默认值是utf-8
而CSV是用UTF-8编码的,而EXCEL是ANSI编码。
这里顺便说一下xls与xlsx的区别,xls是excel2003及以前版本生成的文件格式。xlsx是excel2007及以后版本生成的文件格式

顺便说一下怎么创建一个utf-8编码的csv:
(1)新建一个excel修改后缀名 ×
(2)新建一个txt→打开txt→另存为→选择编码和修改后缀 ×
(3) 新建txt→修改后缀→用notepad++打开→转换编码 √

如果需要循环读取多个csv文件,而每个csv文件的编码都可能不一样,那么最好还是先把所有这些csv统一转为utf-8,再集中进行读取,转换文件的编码格式需要用到python自带的codecs模块

import codecs
def handleEncoding(original_file,newfile):
    #newfile=original_file[0:original_file.rfind(.)]+'_copy.csv'
    f=open(original_file,'rb+')
    content=f.read()#读取文件内容,content为bytes类型,而非string类型
    source_encoding='utf-8'
    #####确定encoding类型
    try:
        content.decode('utf-8').encode('utf-8')
        source_encoding='utf-8'
    except:
        try:
            content.decode('gbk').encode('utf-8')
            source_encoding='gbk'
        except:
            try:
                content.decode('gb2312').encode('utf-8')
                source_encoding='gb2312'
            except:
                try:
                    content.decode('gb18030').encode('utf-8')
                    source_encoding='gb18030'
                except:
                    try:
                        content.decode('big5').encode('utf-8')
                        source_encoding='gb18030'
                    except:
                        content.decode('cp936').encode('utf-8')
                        source_encoding='cp936'
    f.close()
    
    #####按照确定的encoding读取文件内容,并另存为utf-8编码:
    block_size=4096
    with codecs.open(original_file,'r',source_encoding) as f:
        with codecs.open(newfile,'w','utf-8') as f2:
            while True:
                content=f.read(block_size)
                if not content:
                    break
                f2.write(content)
<think>嗯,用户现在问的是如何使用pandas读取CSV文件。之前他们问了关于scikit-learn的问题,现在转向了pandas,可能是在数据处理的流程中遇到了需要读取数据的需求。用户可能是刚开始学习Python数据分析的新手,所以需要详细但清晰的步骤。 首先,我要确定用户对pandas的基础知识了解多少。可能他们知道pandas是什么,但需要具体的操作指导。读取CSV文件是pandas中最基础的操作之,所以应该从最基础的函数开始讲起。 然后,我应该介绍pd.read_csv()这个函数,强调它的简单性。需要给出个最简单的示例,比如pd.read_csv('文件路径'),并说明如何保存到DataFrame中。可能用户会遇到文件路径的问题,比如相对路径和绝对路径的区别,这时候需要提醒他们注意当前工作目录,或者提供如何查找路径的小技巧。 接下来,常见参数是必须的。用户可能会遇到CSV文件中的各种格式问题,比如分隔符不是逗号,或者有标题行、没有标题行,编码问题等等。需要列出常用的参数,如sep、header、names、encoding,并给出示例说明每个参数的作用。例如,如果文件用分号分隔,就需要设置sep=';'。 然后,处理缺失值也是个常见问题。用户的数据中可能有空值或者特定的占位符,比如“N/A”或“-”,这时候需要介绍na_values参数,并举例说明如何替换这些值为NaN,方便后续处理。 数据预览部分,用户读取数据后可能需要查看前几行或数据概览,所以介绍head()、info()、describe()这些方法,帮助他们快速了解数据结构和内容。 进阶技巧部分,可能需要处理大文件,这时候分块读取和选择特定列可以节省内存。同时,设置索引可能在后续分析中有用,比如时间序列数据。这些内容可以展示pandas的灵活性,满足不同场景的需求。 最后,常见错误及解决需要预判用户可能遇到的问题,比如文件路径错误、编码问题、内存不足。给出具体的解决方案,比如检查路径、指定编码格式、使用分块读取,这些都能帮助用户避免常见的。 整个回答要保持结构清晰,步骤分明,用代码示例和表格对比来增强可读性。同时,考虑到用户可能是新手,语言要简洁易懂,避免使用过于专业的术语,必要时解释术语。最后总结使用场景,让用户明确何时使用这些方法,以及推荐的学习资源,帮助他们进学习。</think>以下是用 **pandas** 读取 CSV 文件的完整指南,附带代码示例和常见问题解决方案: --- ### 📂 **基础用法** ```python import pandas as pd # 基础读取(自动识别表头) df = pd.read_csv('data.csv') # 文件路径支持相对/绝对路径 # 显示前5行数据 print(df.head()) ``` --- ### ⚙️ **关键参数详解** | 参数 | 作用 | 示例 | |---------------|------------------------------|------------------------------| | `sep` | 指定分隔符(默认`,`) | `sep=';'` 处理分号分隔文件 | | `header` | 指定标题行位置 | `header=None` 无标题行 | | `names` | 自定义列名 | `names=['日期','销量','地区']` | | `encoding` | 解决中文乱码问题 | `encoding='gbk'` 或 `'utf-8'` | | `dtype` | 指定列数据类型 | `dtype={'价格': float}` | | `na_values` | 定义缺失值标识符 | `na_values=['N/A', 'NULL']` | **示例:处理特殊格式文件** ```python # 读取无表头、分号分隔、指定编码的文件 df = pd.read_csv('sales.txt', sep=';', header=None, names=['日期', '销售额', '区域'], encoding='gbk') ``` --- ### 🛠️ **实用技巧** #### 1. **处理缺失值** ```python # 将"-"识别为缺失值,自动填充为NaN df = pd.read_csv('data.csv', na_values=['-', '缺失']) ``` #### 2. **仅加载部分列** ```python # 只读取需要的列(节省内存) df = pd.read_csv('large_data.csv', usecols=['姓名', '年龄', '成绩']) ``` #### 3. **分块读取大文件** ```python # 分批读取10万行数据块 chunk_iter = pd.read_csv('huge_file.csv', chunksize=100000) for chunk in chunk_iter: process(chunk) # 自定义处理函数 ``` --- ### 🔍 **数据预览方法** | 方法 | 作用 | 示例输出 | |---------------------|-----------------------------|-------------------------| | `df.head(n)` | 显示前n行(默认5行) | 快速查看数据结构 | | `df.info()` | 显示数据类型和内存使用 | 检查是否有缺失值 | | `df.describe()` | 显示数值列统计信息 | 均值、标准差、分位数等 | --- ### 🚨 **常见错误解决** 1. **文件路径错误** ```python # Windows系统注意反斜杠转义 pd.read_csv(r'C:\Users\data.csv') # 使用原始字符串 ``` 2. **编码问题** ```python # 尝试不同编码格式 pd.read_csv('data.csv', encoding='gb18030') # 兼容性更好的中文编码 ``` 3. **内存不足** ```python # 优化内存使用 df = pd.read_csv('data.csv', dtype={'id': 'int32', 'price': 'float32'}) ``` --- ### 🎯 **使用场景建议** - ✅ **推荐**:结构化数据导入、中小型数据分析(GB级以下) - ⚠️ **替代方案**:超大数据集(超过内存容量)建议使用 `Dask` 或数据库直接查询 --- 掌握这些技巧后,您可以通过以下方式验证数据是否成功加载: ```python print(f"数据维度:{df.shape}") # 输出 (行数, 列数) print(f"列名称:{df.columns.tolist()}") # 显示所有列名 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值