Pandas Groupby возвращает две группы с одинаковым уникальным идентификатором - PullRequest
0 голосов
/ 27 мая 2018

У меня есть большой массив данных pandas, где я управляю группами по операциям.

CHROM    POS    Data01    Data02 ......
1        ....................
1        ...................
2        ..................
2        ............
scaf_9   .............
scaf_9   ............

Итак, я делаю:

 my_data_grouped = my_data.groupby('CHROM')

 for chr_, data in my_data_grouped:
      do something in chr_
      write something from that chr_ data

Все естьштраф в небольших данных и в данных, где нет типа строки CHROM, то есть scaff_9.Но с очень большими данными и с scaff_9 я получаю две группы 2.Это действительно не сообщение об ошибке, и это не влияет на вычисления.Проблема в том, когда я записываю данные по группам в файл;Я получаю две группы 2 (разделены неравномерно).

Мне становится очень трудно отследить причину этой проблемы, поскольку сообщения об ошибке нет, а с небольшими данными это работает хорошо. Мое единственное предположение:

  • Существует ли определенное ограничение на количество строк в общем кадре данных по сравнению с сгруппированным кадром данных, который может обрабатывать модуль pandas.Как решить эту проблему?
  • Среди всех 2 большинство из них рассматриваются как целочисленные объекты, а некоторые (более поздняя часть) как строковые объекты, близкие к scaff_9.Возможно ли это?

Извините, я лишь делаю здесь свои предположения, и мне становится невозможно узнать причину проблемы.

Редактирование записи: Я также пытался запустить sort_by(['CHROM']) перед выполнением groupby, но проблема все еще сохраняется.

Любое возможное решение проблемы.

Спасибо,

1 Ответ

0 голосов
/ 27 мая 2018

По моему мнению, существует проблема с данными, очевидно, некоторые пробелы, поэтому pandas обрабатывает каждую группу отдельно.

Решение должно быть сначала удалить пробельные символы:

df.index = df.index.astype(str).str.strip()

Вы также можете проверить уникальныезначения строк index:

a = df.index[df.index.map(type) == str].unique().tolist()

Если первый столбец не является индексом:

df['CHROM'] = df['CHROM'].astype(str).str.strip()

a = df.loc[df['CHROM'].map(type) == str, 'CHROM'].unique().tolist()

РЕДАКТИРОВАТЬ:

Последнее окончательное решение было проще - приведениеstr как:

df['CHROM'] = df['CHROM'].astype(str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...