Конкатенация файлов CSV с использованием Pandas вызывает дублирование - PullRequest
0 голосов
/ 26 октября 2018

Я писал метод Python в Google Colab, чтобы перейти в папку из 84 .csv, объединить их и вывести новый .csv

Вот метод

def concatenate(indirectory = "/content/gdrive/My Drive/Folder/Folder", outfile = "/content/gdrive/My Drive/--.csv"):
  os.chdir(indirectory)
  fileList = glob.glob("*.csv")
  dfList = []
  colnames = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"]
  for filename in fileList:
      print(filename)
      df = pd.read_csv(filename, header = None)
      dfList.append(df)
  concatDf = pd.concat(dfList, axis = 0)
  concatDf.columns = colnames
  concatDf.to_csv(outfile, index = None)

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

Однако по причинам, которые я не понимаю, для этого потребовалось несколько идентификаторов, содержащихся в столбце A, и дублировали их в строках, где столбец A был пустым. Я не осознавал, пока не начал проводить анализ данных, включающих столбцы A и

aCount = df['A'].value_counts()

показывал, что некоторые идентификаторы дублировались в пустые строки большое количество раз.

Я пытался последние 2 дня и не могу понять, что не так с моим методом.

1 Ответ

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

Похоже, у вас проблема с индексом столбца. Дублирование заголовка вызвано тем, что вы говорите пандам, что ваши csvs не имеют заголовков, поэтому он читает первую строку csv как данные, но похоже, что заголовки действительно есть, поэтому они вместо этого включаются в кадры данных как данные , Возможно, это также портит ваш индекс, что может привести к дублированию данных.

for filename in fileList:
    print(filename)
    df = pd.read_csv(filename) # if the headers are the same, use them (i.e. don't use header=None if the headers are present)
    # df.columns = colnames # if they are not the same, you should make them the same
    dfList.append(df)
concatDf = pd.concat(dfList, axis=0) # you can also add arg ignore_index=True to concat on column order rather than column name
concatDf.to_csv(outfile, index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...