Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95

Распарсить строки в CSV файле

06.10.2021, 12:27. Показов 6553. Ответов 9

Студворк — интернет-сервис помощи студентам
Добрый день! У меня есть некоторый файл с расширением csv. В нём какая-то не совсем явная структура данных и стандартным методом pandas распарсить в лоб не удаётся.

Вот пример струткуры данных из файла csv:

PassengerId,Survived,Pclass,Name,Sex,Age ,SibSp,Parch,Ticket,Fare,Cabin,Embarked
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S

Метод использую следующий:

Python
1
data = pd.read_csv('1.csv', sep=',')
Вопрос как корректно отобразить и распарсить такую структуру данных? Может использовать другие библиотеки или как мне предложили отложить готовые решения и распарсить вручную (тут я затрудняюсь..)..

Как у меня открывается первые несколько строк - прикрепил по вложении.
Миниатюры
Распарсить строки в CSV файле  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.10.2021, 12:27
Ответы с готовыми решениями:

Распарсить строки в кавычках в CSV файле
Добрый день! Подскажите, пожалуйста, столкнулся с проблемой: приходит файл в csv следующего вида: "Card...

Пустые строки в файле csv
Здравствуйте. Провожу запись в файл csv для последующей перезаписи в базу данных SQLite3. Код такой from bs4 import...

Переход строки в файле csv
Есть заполненный файл csv. К нему нужно первой строчкой добавить названия столбцов. Я делаю так: $file = 'table.csv'; ...

9
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.10.2021, 14:16
severe90,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd
import numpy as np
df = pd.DataFrame(np.array(['1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S'] + 11*[np.nan]).reshape(-1,1).T, columns='PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket, Fare,Cabin,Embarked'.split(','))
 
###############
# "Braund, Mr. Owen Harris" -> тут нужно ", " заменить на другой разделитель,
# если в других строках есть "имя" без запятых
df.iloc[:,0] = df.iloc[:,0].map(lambda x: str(x).replace(', ', ';'))
print(df)
 
df = pd.DataFrame(df['PassengerId'].map(lambda x: str(x).split(',')).values.tolist(), columns=df.columns.tolist())
###############
 
print(df)
0
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95
06.10.2021, 14:27  [ТС]
Дело в том, что если файл открыть в блокноте, то каждая строка кроме заголовка заключена в кавычки:

PassengerId,Survived,Pclass,Name,Sex,Age ,SibSp,Parch,Ticket,Fare,Cabin,Embarked
"1,0,3,""Braund, Mr. Owen Harris"",male,22,1,0,A/5 21171,7.25,,S"
"2,1,1,""Cumings, Mrs. John Bradley (Florence Briggs Thayer)"",female,38,1,0,PC 17599,71.2833,C85,C"
"3,1,3,""Heikkinen, Miss. Laina"",female,26,0,0,STON/O2. 3101282,7.925,,S"
"4,1,1,""Futrelle, Mrs. Jacques Heath (Lily May Peel)"",female,35,1,0,113803,53.1,C123,S "
"5,0,3,""Allen, Mr. William Henry"",male,35,0,0,373450,8.05,,S"
"6,0,3,""Moran, Mr. James"",male,,0,0,330877,8.4583,,Q"

Вот так. Значит как я понимаю, надо сначала считать каждую строку ну и как минимум удалить кавычки в начале и в конце каждой строке. Верно мыслю?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.10.2021, 14:41
severe90, Да. Убрать кавычки в начале и конце каждой строки. И заменить запятую в поле "Name" или же добавить еще одно поле после "Name" (например "Name_"), а после создания df соединить эти столбцы в один...
0
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95
06.10.2021, 15:51  [ТС]
А тогда еще такой вопрос? Могу ли я тут считать все строки например так:

Python
1
2
3
4
with open('train.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
Тогда вывод будет такой:
['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked']
['1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S']
['2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C']

Или в словарь:

Python
1
2
3
4
with open('train.csv') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row)
И тогда вывод такой:

{'PassengerId': '1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S', 'Survived': None, 'Pclass': None, 'Name': None, 'Sex': None, 'Age': None, 'SibSp': None, 'Parch': None, 'Ticket': None, 'Fare': None, 'Cabin': None, 'Embarked': None}


Какой-то из этих вариантов может мне облегчить задачу, например, перезаписыванием данных в новый csv файл, уже с корректным отображением структуры?

У меня много вопросов, и иногда может не совсем корректных, но путь к знаниям он такой..
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.10.2021, 17:07
severe90, скорректировать исходный train.csv можно так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import csv
 
res = []
with open('train.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        res.append(row)
 
# так как исходного файла нет,
# то скопировал у тебя спарсенные данные
# и "подогнал" под список res 
# эту строчку нужно убрать
res = [['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
 ['1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S'],
 ['2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C']]
#######
 
for i in range(1, len(res)):
    res[i] = res[i][0].strip("'").strip('"').replace(', ', '; ').split(',')
 
myFile = open('train.csv', 'w')
with myFile:
    writer = csv.writer(myFile)
    writer.writerows(res)
Добавлено через 8 минут
Если структура файла, как в примерах:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import csv
 
res = []
with open('train.csv') as f:
    reader = csv.reader(f)
    k = True
    for row in reader:
        if k:
            row = row[0].strip("'").strip('"').replace(', ', '; ').split(',')
        res.append(row)
 
 
myFile = open('train.csv', 'w')
with myFile:
    writer = csv.writer(myFile)
    writer.writerows(res)
0
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95
07.10.2021, 02:30  [ТС]
Цитата Сообщение от Gdez Посмотреть сообщение
скорректировать исходный train.csv можно так

Да, результат получаестя верный в таком случае:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
res = []
with open('train.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        res.append(row)
res = [['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
 ['1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S'],
 ['2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C']]
 
for i in range(1, len(res)):
    res[i] = res[i][0].strip("'").strip('"').replace(', ', '; ').split(',')
 
myFile = open('train.csv', 'w')
with myFile:
    writer = csv.writer(myFile)
    writer.writerows(res)
 
data = pd.read_csv('train.csv')
data.head()
Однако вот тут не совсем понял:

Цитата Сообщение от Gdez Посмотреть сообщение
# так как исходного файла нет,
# то скопировал у тебя спарсенные данные
# и "подогнал" под список res
# эту строчку нужно убрать
Как теперь обощить структуру на весь файл? Не копировать же мне все данные таким образом в код?
Миниатюры
Распарсить строки в CSV файле  
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
07.10.2021, 04:27
severe90, Если еще не изменял сам файл train.csv, попробуй
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import csv
 
res = []
with open('train.csv') as f:
    reader = csv.reader(f)
    k = False
    for row in reader:
        if k:
            row = row[0].strip("'").strip('"').replace(', ', '; ').split(',')
        res.append(row)
        k = True
 
myFile = open('train.csv', 'w')
with myFile:
    writer = csv.writer(myFile)
    writer.writerows(res)
 
data = pd.read_csv('train.csv')
data.head()
0
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95
07.10.2021, 06:32  [ТС]
Цитата Сообщение от Gdez Посмотреть сообщение
попробуй
Нет, в этом случае получается как на скриншоте.

Файл с расширением txt прикрепил.
Миниатюры
Распарсить строки в CSV файле  
Вложения
Тип файла: txt train (4).txt (19.8 Кб, 12 просмотров)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
07.10.2021, 08:32
Лучший ответ Сообщение было отмечено severe90 как решение

Решение

severe90, скачал train (4).txt . Обработал
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import csv
 
res = []
with open('train1.txt') as f:
    lines = f.read().splitlines()
    for row in lines:
        row = row.replace(', ', '; ').split(',')
        res.append(row)
        
 
myFile = open('train1.csv', 'w')
with myFile:
    writer = csv.writer(myFile)
    writer.writerows(res)
data = pd.read_csv('train1.csv')
Я пока только с айпада. На нем нет pandas -> попробуй сам. В csv "пишет" корректно
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.10.2021, 08:32
Помогаю со студенческими работами здесь

Удаление значения из строки в файле CSV
написал программу, по типу "окно входа на сайт" #!/usr/bin/env python3 import hashlib, csv name = input("Meno: ") ...

Распарсить файл csv
Здравствуйте, при считывании из файла csv в котором строки разделяются точкой с запятой, требуется чтобы от ; до ; должны быть слова...

Как распарсить csv файл
Первое - есть какой то самописный парсер Второе - родной фгетксв но вот дело такое выделил интересующие меня колонки родной...

Распарсить строку csv файла
Есть строки в файле разделенные пробелом Считываю в цикле fscanf(file,"%s%s%s%*c", val, val, val); Подскажите как, так же разобрать...

Как в исходном файле CSV удалить строки с "0" в ячейках?
Есть файл CSV нужно удалить строки с "0" в ячейках. Скриншот таблица.стар.jpg Есть код Скриншот код.jpg Получаем результат ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru