Редактировать: лучше 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, чтобы оставить только соответствующий идентификатор образца из имени файла в качестве имен столбцов.