Как прочитать CSV-файл и извлечь конкретный столбец?

Это мой CSV-файл:

CommitId                                RefactoringType      RefactoringDetail
d38f7b334856ed4007fb3ec0f8a5f7499ee2f2b8    Pull Up Attribute   "Pull Up Attribute  protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Player"
d38f7b334856ed4007fb3ec0f8a5f7499ee2f2b8    Pull Up Attribute   "Pull Up Attribute  protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Player"
d38f7b334856ed4007fb3ec0f8a5f7499ee2f2b8    Pull Up Attribute   "Pull Up Attribute  protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Pla

Мне нужно извлечь это:

RefactoringDetail
"Pull Up Attribute  protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Player"
"Pull Up Attribute  protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Player"
"Pull Up Attribute  protected steps : int from class blokusgame.mi.android.hazi.blokus.GameLogic.PlayerAlgorithm to class blokusgame.mi.android.hazi.blokus.GameLogic.Player"

Я пробовал этот код:

import pandas as pd
df = pd.read_csv('result_refactorings.csv', sep='delimiter', header=None)
df.iloc[:,-1]

он возвращает все данные

Любая помощь, пожалуйста!

Как насчет pd.read_csv('result_refactorings.csv', sep='delimiter', usecols=['RefactoringDetail'])?

Chris 29.05.2019 08:53

дубликат: stackoverflow.com/questions/19486369/…

Zaraki Kenpachi 29.05.2019 08:54

@Chris Я попробовал, и он возвращает ожидаемые, но не найденные столбцы: ['RefactoringDetail']

Henda Drid 29.05.2019 08:59

@HendaDrid Вы пробовали без header=None?

Chris 29.05.2019 08:59

@ да, и я попробовал другой код, но он не сработал

Henda Drid 29.05.2019 09:02
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
6
120
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Pandas отлично подходит для работы с CSV-файлами, и следующий код будет всем, что вам нужно, чтобы прочитать CSV-файл и сохранить весь столбец в переменную:

import pandas as pd
df = pd.read_csv('test.csv', sep=';')
refactoring_details = df['RefactoringDetail']
print(refactoring_details)

Редактировать: разделитель в предоставленном файле ; вместо , по умолчанию.

спасибо, но он возвращает эту ошибку: объект «DataFrame» не имеет атрибута «RefactoringDetail»

Henda Drid 29.05.2019 09:28

Не могли бы вы загрузить файл куда-нибудь и дать ссылку?

Toni Sredanović 29.05.2019 09:46

это ссылка: файлbin.net/w1elk0xp7b16v5b4 спасибо за помощь

Henda Drid 29.05.2019 10:03

О, так что вам не хватало, так это того, что ваш разделитель ; вместо стандартного ,. Я отредактировал свой ответ, и теперь он должен работать с вашим файлом.

Toni Sredanović 29.05.2019 10:16

Рад, что смог помочь :)

Toni Sredanović 29.05.2019 10:24

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

import csv
import re
third_column = []
with open("result_refactorings.csv") as csvfile:
    fixed_spaces = [re.sub(" {2,}","\t",x) for x in csvfile]
    reader = csv.DictReader(fixed_spaces, delimiter = "\t")
    for row in reader:
        print(row["RefactoringDetail"])
        third_column.append(row["RefactoringDetail"])

Этот код выводит третий столбец и добавляет каждый элемент в третий столбец в список third_column.. уберите один или другой в зависимости от того, что вы хотите сделать.

Обновлено: При ближайшем рассмотрении кажется, что ваш ввод csv ограничен нечетным количеством пробелов... а не вкладками, как это выглядит... Добавлено небольшое регулярное выражение для замены 2 или более одновременных пробелов фактической вкладкой.. поскольку в текущем состоянии он не является допустимым csv.

спасибо, но он возвращает эту ошибку: KeyError: 'RefactoringDetail', и это общая ошибка для всех кодов, которые я пробовал

Henda Drid 29.05.2019 09:28

Вы пробовали это с Regex, в котором я редактировал? Это не сработало до того, как я сделал это для себя .. убедитесь, что программа чтения работает на fixed_spaces.

Zhenhir 29.05.2019 09:29

В качестве альтернативы .. можете ли вы показать мне, как выглядит одна строка, если вместо этого вы просто делаете print(row)?

Zhenhir 29.05.2019 09:31

он также возвращает ошибку: Ошибка: символ новой строки виден в поле без кавычек - вам нужно открыть файл в режиме универсальной новой строки?

Henda Drid 29.05.2019 09:39

Я вставил ваш пример прямо с этой страницы, и мне не нужно было этого делать. Должна быть какая-то проблема, которая не была перенесена. вы видите, что произойдет, если вы просто побежите print(open("result_refactorings.csv").readlines()[0])?

Zhenhir 29.05.2019 09:58

он возвращает это: CommitId;RefactoringType;RefactoringDetail

Henda Drid 29.05.2019 10:07

Другие вопросы по теме