Вопрос о csv_read и конкретном c разделителе для использования - PullRequest
0 голосов
/ 10 апреля 2020

Я читаю данные в фрейм данных из CSV-файла. В качестве разделителя я использую '\ s + | \ t', который, кажется, работает хорошо. CSV-файлы имеют длину около 500 000 строк. В каждом CSV-файле есть столбец с двумя записями, такими как:

Дата: 04.03.2020 Время: 16:44:45 Начало события

И аналогичная запись для - Конец события произошло. Также этот столбец не всегда с тем же индексом. Но имя столбца всегда '$ EVENT_COMMENTS'

Иногда это портит мой код. Я получаю ошибку синтаксического анализатора.

Ниже приведен код, который я использую:

import pandas as pd
import csv

# common path for all files to be tested
asciipath = "C:\\Users\\rmore\\Desktop\\New folder (2)\\trial"

# ***************************files to be tested *****************************

filename = "blockheater - Copy (2).dxl" # file 2 - $EVENT_COMMENTS column contains weird text (Date: 04.03.2020    Time: 16:44:45  Start event occurred)

# *************  Code to find total length of data file ***********************
with open(asciipath + "\\" + filename, 'r') as infile:
    count = 0
    for line in infile:
        count += 1

# *******************************************************************************
# Choose entire column (skip rows = 0, max nrows  = length of file)
max_nrows_data = count
skip_rows_data = 0

# Choose partial column (skip rows = x, max nrows = y)

# max_nrows_data = 50000
# skip_rows_data = 50000

#*********************************************************************************
total_variables = ['SOAKTIME\CCP:1'] # This is the column that I am mining for - hence using for 'usecols'

# the separator i have used here is a combination of   ----   \s+ OR \t
data = pd.read_csv(asciipath + "\\" + filename, usecols = total_variables, skiprows = range(1,skip_rows_data), nrows = max_nrows_data, engine = 'python', header = 0, quotechar = '"', sep = "\t|\s+", error_bad_lines=True, warn_bad_lines=False) 

Пожалуйста, дайте мне знать, как я могу обойти это. Есть ли способ, которым я могу использовать разделитель по-другому? Есть ли способ изменить столбец $ EVENT_COMMENTS до того, как я прочитаю данные csv?

Примечание. Столбец $ EVENT_COMMENTS для меня бесполезен, и его также можно удалить (если возможно, pythonical) перед использованием read_csv. Я просто не знаю, можно ли это сделать.

Кроме того, я не хочу не использовать 'usecols' и создавать общий фрейм данных, а затем использовать drop () для удаления столбца $ EVENT_COMMENTS, потому что это будет быть трудоемким процессом. Ниже приведены некоторые снимки того, как настроен CSV-файл. Два из них - снимки блокнота. Третий, когда он открывается в Excel как CSV. Спасибо

Изображение 1:

CSV-файл, открытый в блокноте, показывающий структуру файла

Изображение 2: CSV-файл, открытый в блокноте, показ оскорбительного текста

Изображение 3: CSV-файл, открытый в Excel, показ оскорбительного текста

Данные в файле CSV:

...