我有一个从 SQL Server 导出的大型 csv 文件(1.1G)。我想用 python 进行数据整理,但这样做时遇到了一些问题。原始 csv 文件日期如下所示00:07.5, 00:08.3, 00:48.7
,我可以1/12/2015 12:00:07 am, 1/12/2015 12:00:08 am, 1/12/2015 12:00:49 am
通过格式化整个列将其手动转换为 excel 中的d/m/yy h:mm:ss
,但有时输出很奇怪,例如100:00:00
,或者它只保留时间但不保留日期,当我最终成功完成此操作时,我注意到文件大小已从 缩小到36.6 MB
。1.1G
我收到了 excel 通知:可能丢失数据:如果以逗号分隔 (.csv) 格式保存此笔记本,则可能会丢失某些功能。要保留这些功能,请将其保存为 Excel 文件格式。
我对日期时间数据的问题类似于这个问题。
我的问题是:
文件大小缩小后,过程中是否会丢失数据?(最关心)
这个 SQL 到 Excel 日期转换如何工作?
是否可以在 python 中转换日期?
非常感谢。
答案1
我注意到有时您提到导出到 Excel,但您提到它是一个 CSV 文件(并且您提到的错误消息支持这一点)。请注意,Excel 将打开一个.csv
文件,但 Excel 中的许多功能更喜欢以本机格式保存.xslx
。一旦您开始在 Excel 中修改数据,我建议执行Save As...
保存为本机 Excel 文件。
关于您的问题......
由于文件大小缩小,此过程中是否会丢失任何数据?
几乎可以肯定,是的。CSV 文件是纯文本文件,因此文件大小的大幅减少意味着文件中存储的字符数大幅减少。这些多余的字符可能是一堆毫无意义的空格,Excel 会将其删除——但我怀疑不是。
Excel 最多只能打开 1,048,576 行(在非常老版本的 Excel 上最多只能打开 65,536 行)。如果您的 CSV 文件包含超过 1,048,576 行,则在 Excel 中打开并保存结果会将其截断为最大行数。
此外,有时 Excel 会以奇怪的方式显示日期/时间值,从而掩盖完整的日期/时间。如果不查看原始 CSV 数据,很难判断 Excel 可能做了什么。例如,Excel 可能只显示时间部分,而“隐藏”日期部分(即使它在 CSV 中)。您需要使用文本编辑器打开原始 CSV 进行确认。
这个 SQL 到 Excel 日期转换如何工作?
听起来您从 SQL Server 导出数据时创建 CSV 的方法有问题。您没有描述从 SQL Server 导出数据的方法,但是,datetime
您描述的值的格式(00:07.5
、00:08.3
、00:48.7
)不是 SQL Server 通常用于导出datetime
数据的格式。如果您不应用任何格式并接受默认值,则日期/时间字段将采用根据您的操作系统位置的格式。
例如,您可以在 SQL Server 中创建此示例数据:
CREATE TABLE dbo.ExportMe (
ID int IDENTITY(1,1),
SomeData varchar(10),
DateField datetime,
DateField2 datetime2(0)
);
INSERT INTO dbo.ExportMe (SomeData, DateField, DateField2)
VALUES ('Something','20191030','20191030'),
('Something Spooky','20191031','20191031'),
('Something Jolly','20191225','20191225');
然后使用 SQL Server Management Studio导入/导出向导或 SQL Server Integration Services (SSIS) 将表导出到 CSV 目标,您将获得如下所示的文件:
"ID","SomeData","DateField","DateField2"
"1","Something","2019-10-30 00:00:00","2019-10-30 00:00:00"
"2","Something Spooky","2019-10-31 00:00:00","2019-10-31 00:00:00"
"3","Something Jolly","2019-12-25 00:00:00","2019-12-25 00:00:00"
还要注意,导入/导出向导和 SSIS 可以直接导出到 Excel - 尽管这可能很棘手,需要正确的 32/64 位版本的 Excel 来匹配您的 SSMS/SSIS 版本。
是否可以在 python 中转换日期?
假设您的 CSV 文件中有有效日期,Python 应该能够毫无问题地使用这些日期。但是,正如我提到的,听起来您的文件没有有效数据,您可能运气不佳。您可以尝试发布一个单独的问题,其中包含一些来自 CSV 的纯文本示例(即隐藏了私有数据的 CSV 文件中的完整行),看看 Python 专家是否可以帮助您处理这些日期。