Обработка файлов .csv, которые начинаются с "sep =" в начале, с использованием Pandas read_csv () - PullRequest
0 голосов
/ 20 июня 2020

У меня есть файл .csv с разделителями табуляции, который выглядит, как показано ниже, когда вы открываете с помощью Блокнота (пространство, которое вы видите в Блокноте, фактически является вкладкой (\ t):

sep = 
Time Val1 Val2
00:01 10 20

"sep =" там, чтобы Excel мог правильно прочитать файл .csv. Проблема в том, что когда вы пытаетесь открыть его с помощью read_csv, он возвращает фрейм данных с одним столбцом со столбцом с именем "s". Если я открою файл с помощью Excel и дважды щелкните первый ширину столбца, чтобы иметь автоматическую ширину, сохранить и закрыть, тогда файл будет правильно отформатирован с разделителями-запятыми. Больше никаких "sep =" в начале файла, когда вы открываете с помощью Блокнота, а затем Pandas читает его правильно со всеми столбцы и значения.

Прежде чем кто-нибудь спросит: 1. Я попытался удалить первую строку, используя:

with open(csvFileName, mode="rU") as infile:
with open(csvFileName, mode="r") as infile:

, чтобы либо удалить первую строку, либо заменить "\ t" на "," и записать его обратно в другой файл, все не сработало. 2. Я также попытался обнаружить и использовать разные схемы кодирования, поэтому проблема не в кодировании. 3. В файле используется lineterminator = \n, и я использую этот параметр для повторного объявление 4. Я использую skiprows=0, чтобы пропустить первую строку, не сработало 5. Я попытался установить header = 1, чтобы он указывал на строку с заголовком, и установил sep=\t, он считывает количество столбцов и строк правильно, но имена столбцов - "БезымянныйXYZ", а все значения - NaNs

Любая идея приветствуется!

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Если вы хотите использовать значение разделителя из первой строки для анализа csv:

ввод из data.csv:

  sep = ,
  Year Dec Jan
     1  50  60
     2  25  50
     3  30  30
     4  40  20
     5  10  10

Прочитать файл в список и сохранить в фрейм данных :

x = []
sep = ''
with open(filename) as f:
    for i, line in enumerate(f):
        if i == 0:
            sep = line.rstrip()[-1]
        if i > 0:
            x.append(line.rstrip().split(','))
x = pd.DataFrame(data=x[1:], columns=x[0])

x

  Year Dec Jan
0    1  50  60
1    2  25  50
2    3  30  30
3    4  40  20
4    5  10  10

Вы должны добавить еще logi c для обработки, если разделителя нет, или если поле разделителя пусто, или если разделитель не существует в последующих строках csv.

0 голосов
/ 20 июня 2020

При чтении документов используйте skiprows.

skiprowslist-like, int или callable, необязательно

Line numbers to skip (0-indexed) or number of lines to skip (int) at the start of the file.

If callable, the callable function will be evaluated against the row indices, returning True if the row should be skipped and False

в противном случае. Примером допустимого вызываемого аргумента может быть лямбда x: x в [0, 2].

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