CSV 文件 已经成为存储结构化数据的通用格式。CSV 本质上是文本文件,大多数应用在导出数据时都会选择 CSV。

但用表格工具打开 CSV,一旦文件很大就很容易崩。 例如你把一个超大的 CSV 上传到 Google Sheets,常常会直接报错;就算能打开,行数到几十万以后体验也会变得非常糟糕。

Google Sheets Error on big CSV file
Google Sheets Error on big CSV file

那么问题来了:如果你不是技术人员,怎么在线编辑超大的 CSV 文件? 数据科学家和开发者通常会用数据库或编程语言来处理大数据集,但对日常 CSV 的查看、修改、清洗来说,这套方案门槛太高、也太重。

在这篇指南里,你会学到:

只查看 vs 真编辑 CSV

本文重点是教你编辑(Edit) CSV。 如果你只是想打开并可视化(或做基础筛选)CSV,更推荐用大数据可视化工具(例如 Microsoft PowerBi)。

如果你想要一个免费的“大文件查看”替代方案,也可以在 Linux / macOS 上用 Terminal。可以参考我们的教程:How to search in a big CSV file using Linux or macOS Terminal

150 万行内在线编辑 CSV:用 Datablist

Datablist 是一款在线 data editor。你可以直接在浏览器里打开 CSV 文件,不需要安装第三方软件。Datablist 的工作方式是利用现代浏览器提供的本地数据库能力(想深入了解可以看文档:check our documentation to learn more)。

在 Free plan 中,Datablist 支持加载最多 100 万行 CSV。Standard Plan 上限为 150 万行。可以在定价页查看不同 plan 的详细对比

Step 1:创建 collection 并导入 CSV

Note
Datablist CSV editor 需要先注册账号,才能打开大 CSV 文件。继续之前请先创建账户。

要把 CSV 导入 Datablist,先创建一个空的 collection,然后使用 “Import CSV/Excel” 向导来加载文件。

Create new collection
Create new collection
Select CSV file
Select CSV file

选择你要导入的 CSV 列,并确认系统识别的数据类型。Datablist 会读取文件的前几行,自动判断每一列的 data type。数据类型会影响你后续的排序(sort)和筛选(filter)。

Check column CSV column data type
Check column CSV column data type

检查 preview 数据后,点击 “Import” 开始导入。

Import CSV progress
Import CSV progress

Notes
导入大 CSV 需要时间。一般来说,100 万行大约需要 5 分钟。若想中途取消,点击 “Stop Import” 按钮即可停止导入。

Step 2:在线编辑你的大 CSV

导入过程中,Datablist 会解析你的 CSV。然后把数据存到浏览器里的本地 database。 刷新页面数据也会保留,不会莫名其妙被清空(除非你主动清理,或者本地磁盘空间到上限)。

用 Datablist 你可以基于一个或多个条件来筛选 CSV,也支持 “full-text” 搜索。

Notes
Filter / search 的响应时间跟数据量以及匹配结果数量有关。匹配项越多,通常返回越快;如果 Datablist 必须扫描全部数据才能确认只有 1 条或 0 条匹配,响应会更慢。

Filter and search your CSV data
Filter and search your CSV data

编辑记录

你可以用类似 spreadsheet 的界面直接编辑数据。选中单元格后按 “Enter” 即可修改内容。datetime 字段会提供日历选择器;长文本会在更大的 textarea 里编辑,更方便。

直接在浏览器中编辑 CSV 单元格

点击每一行左侧的展开按钮,会打开该条记录的 detail drawer。

Filter and search your CSV data
Filter and search your CSV data

合并重复记录

Datablist 也提供一些更进阶的编辑能力来管理数据,其中一个就是 Duplicates Finder

Find and remove duplicate values
Find and remove duplicate values

去重算法会对比一列或多列的值,列出所有重复记录。在重复列表里,你可以一键自动合并“无冲突”的重复项;剩下有冲突的记录,则可以用合并向导逐条处理。你也可以读我们的教程了解:how to deduplicate a CSV filehow to merge duplicate rows from an Excel file

合并记录

你也可以在数据列表页直接合并记录:选中要合并的 items,然后点击 “Merge Items”。

Select and merge items from listing
Select and merge items from listing

系统会对比所有选中记录,并选择信息最完整的一条作为 “Primary Item”。随后,把其他记录中不冲突的字段值,补到 Primary Item 的空字段里。确认合并后,除 Primary Item 外的记录都会被删除,保留合并后的那条。

Manual merging assistant
Manual merging assistant

Step 3:导出编辑后的 CSV 数据

当你修改完成后,可以把数据留在 Datablist 里继续使用,也可以导出为 CSV 或 Excel 文件。

Export your data
Export your data

导出支持一些配置选项:

  • Properties to export - Collection Properties 可以在数据表中隐藏。当你隐藏了至少一个字段时,导出器会让你选择:导出全部字段,还是只导出当前可见字段。
  • The export format - CSV 或 Excel。
  • Column Delimiter - 对 CSV 格式,可以选择用 “Comma” 或 “Semicolon” 作为分隔符。
Exporter options
Exporter options

Important
Excel 单个 cell 的文本长度不能超过 32k 字符。同时,Excel 也无法很好地导入超大的 Excel 文件(见 Excel limits)。处理大数据集时,更推荐导出为 CSV。

更大的 CSV 文件怎么搞

拆分 CSV,再编辑后合并

Datablist 的 CSV 导入上限是 150 万行(Free plan 为 100 万行)。超过这个上限,文件会被截断。对于几百万行这种更大的 CSV,建议把大文件拆成多个小 CSV:分别用 Datablist 编辑、导出,再把结果合并回一个大 CSV。

拆分大 CSV 最简单的办法就是去 Google 搜 “Online CSV splitter”。我常用的是 ExtendsClass 的免费工具:CSV splitter from ExtendsClass

Important
导入这些拆分后的小 CSV 到 Datablist 时,每个文件都必须带 header 行。拆分时记得设置让 splitter 把 header 复制到每个分片文件里。

Split your big CSV file online
Split your big CSV file online

接下来按上面的教程分别编辑这些小 CSV。

然后再用另一个在线工具把所有 CSV 合并回一个文件。ExtendsClass 也提供了一个很好用的在线 CSV 合并工具

Merge CSV files online
Merge CSV files online

Mac 和 Linux 用户的选择

如果你用的是 Mac 或 Linux,还有一个选择是 Visidata

Visidata 是一个免费工具,通过 terminal 来展示并操作 CSV。对非技术用户来说确实有点劝退……但如果你愿意尝试,真的会有一种“我也能搞定大数据”的成就感。

Visidata Screenshot
Visidata Screenshot

FAQ

Google Sheets 的行数上限是多少?

2022 年 3 月,Google Sheets 把 cell 总数上限提升到 1000 万(之前是 500 万)。换算成行数上限的方法是:用 1000 万除以你表格的列数。

理论上,Google Sheets 似乎可以用来打开并编辑很大的 CSV(接近 100 万行)。

但 Google Sheets 每次打开页面都会把整张表的数据从服务器拉到浏览器内存里。 对做财务建模这种需要跨单元格公式的场景很方便,但对数据列表的操作与清洗来说效率很低。所以当行数到了几十万级别后,我并不推荐用 Google Sheets 做数据处理。

Airtable 的行数上限是多少?

根据 Airtable support page,各 plan 限制如下:

  • Free Plan - 1,200 records per base
  • Plus Plan - 5,000 records per base
  • Pro Plan - 50,000 records per base
  • Enterprise Plan - 100k records per table (250,000 records per base)

在 Airtable 里,一行(row/line)就是一条 record;而 base 由多个可相互关联的 table 组成(有点像 spreadsheet 里包含多个 sheet 的 workbook)。

在这样的限制下,Airtable 并不是用来打开超大 CSV 的工具。

Microsoft Excel 的行数上限是多少?

根据 Microsoft Support,截至 2022 年,Excel 的行数上限为 1,048,576。

另外,每个单元格不能超过 32,767 个字符。

Apple Numbers 的行数上限是多少?

和其他表格工具一样,Apple Numbers 也不适合处理超大的 CSV 文件。 Apple Numbers 每个 sheet 的行数上限是 1,000,000(导入 CSV 也受这个限制)。

但当数据量达到这个级别时,界面几乎无法使用;编辑一个单元格都会让应用卡住好几秒。

Apple Numbers rows limit
Apple Numbers rows limit

有可以用来测试 Datablist 的示例 CSV 吗?

当然有!你可以访问我们的 sample CSV Files page,下载最高到 200 万条 records 的示例 CSV 文件。