Файл CSV, импортированный из SQL Server, потерял данные после форматирования даты и времени - PullRequest
0 голосов
/ 28 октября 2019

У меня есть большой CSV-файл (1.1G), экспортированный из SQL Server, который я хотел бы предварительно обработать в 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, чтобы его можно было распознать. Но я заметил, что размер файла сократился до 36.6 MB с 1.1G. Я получил уведомление Excel: Возможные потери данных: некоторые функции могут быть потеряны, если вы сохраните этот блокнот в формате с разделителями-запятыми (.csv). Чтобы сохранить эти функции, сохраните его в формате файла Excel.

Я попытался сохранить файл в формате csv и xlsx, но оба результата привели к потере строк во фрейме данных, как я читал в файлах вPython и их проверили их shape: (26137666, 4) (оригинальный файл csv) против (1048575, 4) (файл xlsx).

Мои данные даты и времени в файле Excel выглядят примерно так: this .

Мои вопросы:

  1. Как предотвратить потерю данных?

  2. Можно ли преобразовать формат столбца datetime в python?

1 Ответ

0 голосов
/ 28 октября 2019

Из Excel, а не Python.

Я нашел этот предмет исследования. Есть способ скопировать все эти данные в таблицу данных Excel. (У меня есть эта проблема раньше с CSV-файлом из 50 миллионов строк). Если есть какой-либо формат, может быть включен дополнительный код. Попробуйте это.

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

Позже вы получите все данные в очень тяжелом файле, поэтому просто разбейте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...