Python Pandas CSV Tutorial: From Zero to Data Analysis

March 2026 · 17 min read · 4,103 words · Last Updated: March 31, 2026Advanced

Python Pandas CSV 教程:从零到数据分析

我永远不会忘记在我们数据科学训练营的第二周,Sarah脸上的表情。她盯着自己的 Jupyter 笔记本三个小时,以为自己快要失去理智。她的 CSV 文件在 Excel 中打开时有 5000 条客户记录,但当她将其加载到 Pandas 中时,`df.shape` 仅显示 2847 行。没有错误信息。没有警告。只有 2153 名客户静静地消失在数字虚空中。 罪魁祸首?混合字符编码。她公司的 CRM 系统已经收集数据多年,而在某个时候,有人将编码从 Latin-1 切换到了 UTF-8。Pandas 遇到这些不兼容的字符,耸了耸肩,然后就……跳过了它们。Sarah 花了三个小时质疑自己的 Python 安装、代码、职业选择,甚至可能是自己的理智——而真正的问题仅仅是一个她不知道存在的参数。 这个场景在我教授的每一届训练营中都在上演。CSV 文件看似简单——它们只是用逗号分隔的文本,对吧?但它们实际上是边缘案例、编码问题、数据类型不匹配和静默失败的地雷,这些问题可以在你意识到出错之前就破坏整个分析。在教授了 500 多名学生并调试了数千个 CSV 导入问题后,我发现“加载 CSV”和“正确加载 CSV”之间的差距是大多数数据科学项目夭折的地方。

为什么 CSV 文件比看起来更难

当我问新学生 CSV 文件可能出错的地方时,他们通常会说“没什么大不了的——它只是文本。”然后我展示给他们我收集的现实世界的 CSV 恐怖故事,他们的信心顿时消失。 CSV 代表“逗号分隔值”,但这个名字具有误导性。实际上,CSV 文件可以用逗号、分号、制表符、管道符,或者导出数据的人那一天想使用的任何字符分隔。它们可能有表头,也可能没有。它们可能在文本字段周围使用引号,或者可能引号使用不一致。它们可能使用“MM/DD/YYYY”或“DD-MM-YYYY”或“YYYY/MM/DD”格式编码日期,或使用 Unix 时间戳,或使用 Excel 序列号(是的,真的)。 CSV “标准”(RFC 4180)更像是一个大多数软件愉快忽略的建议。Microsoft Excel 根据你的区域设置以不同的方式导出 CSV。Google Sheets 对格式化有自己的一套见解。数据库导出遵循另一套约定。当你从多个来源提取数据时——这基本上是每个现实世界项目——你肯定会遇到不一致的情况。 这尤其危险的原因在于:Pandas 会试图提供帮助。它会对你的数据类型、分隔符、编码和缺失值做出假设。有时这些假设是正确的。有时它们是灾难性的错误。有时——就像 Sarah 的情况一样——它们是错误的,但不会抛出错误,而是静默地损坏了你的数据。 我曾见过学生花几天时间建立复杂的机器学习模型,但数据集中 Pandas 错误解析了 30% 的日期。我看过分析师根据收入数据提出商业建议,其中 Pandas 将货币符号理解为文本,并将所有内容转换为字符串。我已经调试过的情况是,Pandas 在一列中将“N/A”读取为缺失数据,但在另一列中将其作为字面字符串“N/A”,因为数据类型不同。 解决方案不是避免 CSV 文件——它们无处不在,且常常是不可避免的。解决方案是准确理解 Pandas 在读取你的 CSV 时所做的,并明确控制它所做的每一个假设。这就是本教程的主题:从“我希望这样有效”转变为“我完全知道我的数据发生了什么”。

Pandas CSV 读取管道:实际发生了什么

在我们深入代码之前,你需要了解调用 `pd.read_csv()` 时后台发生的事情。这不是学术知识——理解这个管道是区分那些与 CSV 文件作斗争的学生和那些自信处理它们的学生的关键。 当 Pandas 读取 CSV 文件时,它会经历几个不同的阶段: 阶段 1:文件访问和编码检测 Pandas 打开文件并尝试将字节解码为文本。默认情况下,它假定为 UTF-8 编码,这对许多现代文件有效,但对旧数据会失败得很惨。如果编码不正确,Pandas 可能会抛出错误,或者可能静默地将问题字符替换为问号或 Unicode 替代字符。 阶段 2:分隔符检测 Pandas 查看前几行以猜测哪个字符分隔你的列。它通常对此很有把握,但“相当不错”并不等于“总是正确”。我见过一些文件前 100 行使用逗号,而第 101 行由于有人手动编辑文件而切换到分号。 阶段 3:表头检测 Pandas 假定你的第一行包含列名,除非你另外说明。如果你的 CSV 没有表头,Pandas 会将你的第一数据行视为列名,这会造成混乱。如果你的 CSV 有多行表头(在 Excel 导出中很常见),Pandas 只会使用第一行。 阶段 4:数据类型推断 这时事情开始变得非常有趣。Pandas 检查每列的前几行并猜测数据类型。数字变成整数或浮点数。文本变成字符串(或在 Pandas 术语中称为“对象” dtype)。日期……好吧,日期很复杂。如果看起来像日期,Pandas 会尝试解析它们,但它对“日期样式”的定义可能与您的数据不匹配。 阶段 5:缺失值处理 Pandas 有一份内置字符串列表,将它们视为缺失值:“NA”、“N/A”、“NULL”、“NaN”、空字符串,以及其他一些。如果你的数据使用不同的约定(如“MISSING”或“---”或“9999”),Pandas 不会将它们识别为缺失值。 每个阶段都涉及假设。每个假设都是一个静默数据损坏的机会。可靠的 CSV 导入的关键在于通过参数使这些假设明确。

看不见的小数点的故事

让我给你讲讲 Marcus,他是我 2023 春季项目中的一名学生。他正在分析一家欧洲电子商务公司的销售数据,而他的分析显示平均订单额在第三季度神秘地下跌了 90%。他的经理惊慌失措,认为他们面临重大商业问题。 Marcus 花了两天调查。他检查了数据库查询,验证了导出过程,在文本编辑器中检查原始 CSV 文件——一切都看起来正常。CSV 中的数字是正确的:“1.234,56”表示一千二百三十四欧元和五十六分钱,使用的是欧洲以小数点作为千位分隔符、以逗号作为小数点的惯例。 但当他将数据加载到 Pandas 中时,这些数字变成了 1.234(一个点二三四)。Pandas 看到句号并将其解释为小数点,因为这是美国的惯例。逗号?Pandas 认为那是千位分隔符并忽略了。因此 “1.234,56” 变成了 1.234,“5.678,90” 变成了 5.678。数据集中每一个货币值都出现了 100 倍或更多的错误。 一旦我们识别出问题,解决方案就简单了:在 `pd.read_csv()` 中指定 `decimal` 和 `thousands` 参数。但找到这个问题花了几天,因为数据乍一看是合理的。这些数字是数值的,它们在正确的列中,只是碰巧完全错误。 这就是我所说的 CSV 导入是危险的原因。错误并不总是显而易见的。它们并不总是引发异常。有时你的数据只是安静地变得不正确,而你直到基于它做出决定时才会注意到。 Marcus 的故事有一个如意结局——我们在造成真正伤害之前捕捉到了错误。但我从同行处听到了恐怖故事,关于在分析直到执行演示之前,才有人注意到数据是错误的。一家公司差点因为损坏的 CSV 导入做出数百万美元的投资决策。

理解数据类型:正确导入的基础

让我们切入实际。这里有一个表格,展示了我在学生项目中看到的最常见数据类型问题,以及如何处理它们:
数据类型 常见问题 Pandas 默认行为 正确方法
整数 前导零(邮政编码),以文本存储的大数字 转换为 int64,丢弃前导零 对代码使用 dtype='str',对可空整数使用 dtype='Int64'
浮点数 货币符号,千位分隔符,欧洲小数 如果存在非数字字符,则转换为对象(字符串) 首先清理数据或使用转换器参数
日期 多种格式,时区问题,Excel 序列日期 除非格式明显,否则保持为字符串 使用 parse_dates 和显式格式字符串
布尔值 是/否,真/假,1/0,Y/N 变体 保持为字符串 使用转换器或导入后映射
类别 重复的字符串值(州、国家、产品类型) 作为对象存储,浪费内存 使用 dtype='category' 提高效率
缺失值 空字符串,“N/A”,“NULL”,“---”,“9999”等 只识别标准的 NA 值 使用 na_values 参数指定自定义缺失指示符
从这个表中得出的最重要的教训是:永远不要信任 Pandas 对任何重要事项的默认数据类型推断。始终明确指定关键列的数据类型,特别是 ID、日期和数值。 这是一个来自学生项目的真实例子。他们在分析客户数据时注意到一些客户 ID 缺失。结果表明,ID 并不缺失——它们是以零开头的邮政编码,如“01234”代表马萨诸塞州。Pandas 将它们转换为整数(1234),当他们尝试与另一个数据集进行连接时,那个数据集中的正确字符串 ID(“01234”),连接默默失败,导致数千条记录丢失。 解决方案: ```python # 错误 - 丢失前导零 df = pd.read_csv('customers.csv') # 正确 - 保留邮政编码为字符串 df = pd.read_csv('customers.csv', dtype={'zip_code': 'str'}) ``` 这一参数让他们避免了一次完全错误的分析。

编码问题:为何你的国际数据会崩溃

让我分享一些让大多数学生感到惊讶的事情:有几十种不同的方法可以将文本编码为字节,而 CSV 文件并不包含关于所使用编码的元数据。你只能猜测,如果猜错了,你的数据就会崩溃。
“在我意识到我们的国际评论中的每一个重音符号、每一个表情符号、每一个非英语字符在导入过程中都被破坏之前,我花了六个月分析客户反馈数据。我们的情感分析模型在垃圾数据上训练,而没人注意到,因为英语评论看起来还不错。” — 前学生,现任财富 500 强公司的机器学习工程师
UTF-8 是现代标准,应该是你的第一选择。但旧系统通常使用 Latin-1(也称为 ISO-8859-1),Windows 系统可能使用 CP1252,如果你正在处理来自东亚的数据,可能会遇到 Shift-JIS、GB2312 或 Big5。 你如何知道使用哪个编码?有时你可以询问提供文件的人。有时你可以查看文件的内容以检测潜在的编码问题。
C

Written by the CSV-X Team

Our editorial team specializes in data analysis and spreadsheet management. We research, test, and write in-depth guides to help you work smarter with the right tools.

Share This Article

Twitter LinkedIn Reddit HN

Related Tools

How to Convert CSV to Excel — Free Guide Top 10 Data Tips & Tricks David Liu — Editor at csv-x.com

Related Articles

How to Fix CSV Encoding Issues (UTF-8, Latin-1, and the Dreaded Mojibake) Data Visualization Without Code: Turn Spreadsheets into Charts — csv-x.com The 10 Spreadsheet Formulas That Handle 90% of Real Work \u2014 CSV-X.com

Put this into practice

Try Our Free Tools →

🔧 Explore More Tools

Csv To HtmlConvert Csv To Json FreeCsv To PdfData Tools For DevelopersCsv To ExcelCsv To Json Converter Online

📬 Stay Updated

Get notified about new tools and features. No spam.