Как прочитать CSV-файл, который имеет разделитель столбцов, а также разделитель записей - PullRequest
0 голосов
/ 11 октября 2018

Мой CSV-файл состоит из 3 столбцов: имя, возраст и пол, и пример данных:

AlexÇ39ÇM
#Ç#SheebaÇ35ÇF
#Ç#RiyaÇ10ÇF

Разделитель столбцов - «Ç», а разделитель записей - «# Ç #».Обратите внимание, что первая запись не имеет разделителя записей (# Ç #), но все остальные записи имеют разделитель записей (# Ç #).Не могли бы вы сказать мне, как прочитать этот файл и сохранить его в кадре данных?

1 Ответ

0 голосов
/ 11 октября 2018

Оба модуля csv и pandas поддерживают непосредственное чтение csv-файлов.Однако, поскольку вам необходимо построчно изменять содержимое файла перед дальнейшей обработкой, я предлагаю читать построчно файл, изменять каждую строку по своему усмотрению и сохранять обработанные данные в списке для дальнейшей обработки.

необходимые шаги включают в себя:

  • открытый файл
  • чтение файла строка за строкой
  • удаление символа новой строки (который является частью строки при использовании readlines()
  • заменить разделитель записей (поскольку запись эквивалентна строке)
  • разделить строки в разделителе столбцов

Поскольку .split() возвращает список строковых элементов, мы получаем общее значениесписок списков, где каждый «подсписок» содержит / представляет данные строки / записи. Данные, отформатированные таким образом, могут быть прочитаны pandas.DataFrame.from_records(), что очень удобно в данный момент:

import pandas as pd

with open('myData.csv') as file:
    # `.strip()` removes newline character from each line
    # `.replace('#;#', '')` removes '#;#' from each line
    # `.split(';')` splits at given string and returns a list with the string elements
    lines = [line.strip().replace('#;#', '').split(';') for line in file.readlines()]

df = pd.DataFrame.from_records(lines, columns=['Name', 'Age', 'Sex'])

print(df)

Примечания:

  1. Я изменил Ç на ;, который работал лучше для меня из-за проблем с кодированием. Однако основная идея алгоритма остается прежней.

  2. Reдобавление данных вручную, как это может стать довольно ресурсоемким, что может быть проблемой при обработке больших файлов.Могут быть более элегантные способы, о которых я не знаю.Если возникают проблемы с производительностью, попробуйте прочитать файл порциями или поищите более эффективные реализации.

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