Удаление дубликатов, когда все значения в строке файла .csv совпадают с Python - PullRequest
0 голосов
/ 26 февраля 2020

Я имею дело с крайне неструктурированным отчетом .csv и борюсь с функцией drop_duplicates. Форма моего набора данных - 4084 строки и 39 столбцов.

Моя задача довольно проста: я хочу использовать drop_duplicates, чтобы он удалял каждую строку, в которой все 39 значений столбцов идентичны, но больше ничего.

Я пробовал следующий блок кода, где новый файл без дубликатов будет сохранен как "crm_pre_eidup", но я просто получаю TypeError: объект 'tuple' не вызывается ".

import pandas as pd
from csv import reader
crm_preprocessed = "CRM_kaikki_data_Pekka1.csv"
crm_pre_eidup = "CRM_kaikki_data_eidup.csv"

df = pd.read_csv(file_name, sep="\t or ,", engine='python')

# Notes:
# - the `subset=None` means that every column is used 
#    to determine if two rows are different; to change that specify
#    the columns as an array
# - the `inplace=True` means that the data structure is changed and
#   the duplicate rows are gone  
df.drop_duplicates(subset=None, inplace=True)

# Write the results to a different file
#df=pd.DataFrame(list(reader(crm_pre_eidup)))
df.to_csv(crm_pre_eidup)
df.head()

Я совершенно уверен, что решение заключается просто в использовании: DataFrame.drop_duplicates(self, subset: Union[Hashable, Sequence[Hashable], NoneType] = None, keep: Union[str, bool] = 'first', inplace: bool = False, ignore_index: bool = False)

1 Ответ

0 голосов
/ 26 февраля 2020

Не могли бы вы попробовать следующие изменения

  • необходимо добавить несколько разделителей с помощью | поскольку оно ожидает выражение регулярного выражения, если оно больше 1
  • filename = crm_preprocessed
  • дедупликация использует все столбцы по умолчанию, поэтому вы можете отбросить этот аргумент
  • и убедиться, что ваша рабочая папка установлена правильно или укажите полный путь

'' '

import pandas as pd
from csv import reader

crm_preprocessed = "CRM_kaikki_data_Pekka1.csv"
crm_pre_eidup = "CRM_kaikki_data_eidup.csv"

df = pd.read_csv(crm_preprocessed , sep='\t|,', engine='python')

# Notes:
# - the `subset=None` means that every column is used 
#    to determine if two rows are different; to change that specify
#    the columns as an array
# - the `inplace=True` means that the data structure is changed and
#   the duplicate rows are gone  
df.drop_duplicates(inplace=True)

# Write the results to a different file
#df=pd.DataFrame(list(reader(crm_pre_eidup)))
df.to_csv(crm_pre_eidup)
df.head()

ссылка: Несколько разделителей в одном файле CSV и https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html

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