【问题标题】:CSV file imported from SQL Server has lost data after formatting datetime从 SQL Server 导入的 CSV 文件在格式化日期时间后丢失了数据
【发布时间】:2019-10-28 01:49:52
【问题描述】:

我有一个从 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 以使其成为d/m/yy h:mm:ss 格式,以便它可以识别。但我注意到文件大小从1.1G 缩小到36.6 MB。我收到了excel通知:Possible Data Lost: Some features might be lost if you save this notebook in the comma-delimited(.csv) format. To preserve these features, save it in an Excel file format.

我尝试将文件保存为 csv 和 xlsx 格式,但是当我在 python 中读取文件并检查了他们的 shape: (26137666, 4)(原始 csv 文件)时,两者都导致数据框中的行丢失vs (1048575, 4)(xlsx 文件)。

我的原始 excel 文件日期时间数据看起来类似于 this。

我的问题是:

  1. 如何防止数据丢失?

  2. 是否可以在python中转换日期时间列格式?

【问题讨论】:

  • Excel 没有足够的行数来处理这么多数据,至少一张纸上没有。
  • @BigBen 我认为你是对的。有什么建议吗?
  • 老实说,我真的避免在这里使用 Excel,它不适合这么多数据。
  • 你应该使用 Pandas 来处理这种数据
  • 从您的链接帖子中,第一个 answer 表示“Excel 具有正确的 DATETIME 值(即使在粘贴后应用了格式),但默认情况下不会'没有内置格式来显示 SQL DATETIME。"。我的问题是:如果您打算在 Python 中处理此文件,为什么要在 Excel 中格式化日期?所有日期组件都在 CSV 文件中,否则您认为更改日期格式会显示更多数据吗?

标签: python sql-server excel csv


【解决方案1】:

来自 Excel,而不是 python。

我发现这个主题正在研究。有一种方法可以将所有这些数据复制到 Excel 数据表中。 (我之前有一个 5000 万行的 CSV 文件有这个问题)如果有任何格式,可以包含额外的代码。试试这个。

Sub ReadCSVFiles()

Dim i, j As Double
Dim UserFileName As String
Dim strTextLine As String
Dim iFile As Integer: iFile = FreeFile

UserFileName = Application.GetOpenFilename
Open UserFileName For Input As #iFile
i = 1
j = 1
Check = False

Do Until EOF(1)
    Line Input #1, strTextLine
    If i >= 1048576 Then
        i = 1
        j = j + 1
    Else
        Sheets(1).Cells(i, j) = strTextLine
        i = i + 1
    End If
Loop
Close #iFile
End Sub

稍后您将在一个非常重的文件中获取所有数据,因此只需将其拆分即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2023-02-18
    • 2022-11-23
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多