Pandas read.csv создает кортеж - PullRequest
       1

Pandas read.csv создает кортеж

1 голос
/ 07 января 2020

Редактировать: лучше l oop внизу тоже. p - это мое сокращение от pandas.

. Я пытаюсь ввести ряд спектров, доступных как .csvs (без заголовков), объединить их и отбросить некоторые столбцы. Эти спектры изначально доступны в виде двух столбцов:

col1  col2                       col1-1   col1-2   col2-1   col2-2 ... colm-1   colm-2
X1    Y1  X M spectra to make    X1-1     Y1-1      X2-1     Y2-1  ...  Xm-1    Ym-1
...   ...                                            ...
Xn    Yn                         X1-n     Y1-n      X2-n     Y2-n  ...  Xm-n    Ym-n

, где все Col1 являются избыточными. Отбрасывая все Col1 или все, кроме 1-го Col1, спектры готовы для использования в нескольких различных инструментах, которые я построил.

Проблема заключается в моем потреблении l oop:

extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

mergespec=p.DataFrame()
for f in all_filenames:
    file = p.read_csv(f, header=None, names=["WVNB", "Int"]),
    filemerge = p.merge(file, mergespec, on="WVNB", how='outer')

Объект 'file' возвращается как кортеж. Код завершается ошибкой на этапе слияния, который отклоняется, поскольку "Может объединять только объекты Series или DataFrame, класс" tuple "был передан" .

Я могу подтвердить, что 'all_filenames' заполнено правильно, и что read_csv отлично работает вне этого l oop. На самом деле, у меня есть аналогичный l oop в другой записной книжке, который объединяет тонкие спектры (которые я использую при генерации рисунков).

Уважаемые читатели, я очень новичок в Python и мой код, если 90% сценарий детского ограбления. Пожалуйста, помогите мне понять, почему мой p.read_csv возвращает кортеж, или как я получил этот l oop. Спасибо!

Edit: Malwaisen и Vishwas оба ответили на вопрос о поколении кортежей, которое работало. Это открыло другие проблемы с соответствующими именами столбцов. Однако , после прочтения Pandas Слияние 101 Я нашел более экономный l oop:

filemerge = p.concat([p.read_csv(f, header = None, names=["cm^-1", f]) for f in all_filenames], axis=1)

, который заменяет все из mergespec = p.Dataframe ( ) вперед. Это соответствует моей цели с меньшим количеством строк. Кроме того, поскольку f было именем столбца и именем файла, я использовал df.columns.str.rstrip('.0.csv') и lstrip, чтобы оставить только соответствующий идентификатор образца из имени файла в качестве имен столбцов.

Ответы [ 2 ]

1 голос
/ 07 января 2020

У вас есть запятая в конце file=.... Python видит это как кортеж, где file[0] - ваш файл, и вы можете иметь file[1] и так далее с дополнительными запятыми.

Просто удалите эту запятую, и вы хороши для go. Или, если запятая близка вашему сердцу, используйте file[0] в вашем заявлении о слиянии.

0 голосов
/ 07 января 2020

Попробуйте этот фрагмент и посмотрите, работает ли он.

extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

mergespec=p.DataFrame()
for f in all_filenames:
    file = p.read_csv(list (f), header=None, names=["WVNB", "Int"]),
    filemerge = p.merge(file, mergespec, on="WVNB", how='outer')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...