Как строки сделать столбцами в pandas
Добавил пользователь Владимир З. Обновлено: 30.08.2024
pandas это высокоуровневая Python библиотека для анализа данных. Почему я её называю высокоуровневой, потому что построена она поверх более низкоуровневой библиотеки NumPy (написана на Си), что является большим плюсом в производительности. В экосистеме Python, pandas является наиболее продвинутой и быстроразвивающейся библиотекой для обработки и анализа данных. В своей работе мне приходится пользоваться ею практически каждый день, поэтому я пишу эту краткую заметку для того, чтобы в будущем ссылаться к ней, если вдруг что-то забуду. Также надеюсь, что читателям блога заметка поможет в решении их собственных задач с помощью pandas, и послужит небольшим введением в возможности этой библиотеки.
DataFrame и Series
Чтобы эффективно работать с pandas, необходимо освоить самые главные структуры данных библиотеки: DataFrame и Series. Без понимания что они из себя представляют, невозможно в дальнейшем проводить качественный анализ.
Series
Структура/объект Series представляет из себя объект, похожий на одномерный массив (питоновский список, например), но отличительной его чертой является наличие ассоциированных меток, т.н. индексов, вдоль каждого элемента из списка. Такая особенность превращает его в ассоциативный массив или словарь в Python.
В строковом представлении объекта Series, индекс находится слева, а сам элемент справа. Если индекс явно не задан, то pandas автоматически создаёт RangeIndex от 0 до N-1, где N общее количество элементов. Также стоит обратить, что у Series есть тип хранимых элементов, в нашем случае это int64, т.к. мы передали целочисленные значения.
У объекта Series есть атрибуты через которые можно получить список элементов и индексы, это values и index соответственно.
Доступ к элементам объекта Series возможны по их индексу (вспоминается аналогия со словарем и доступом по ключу).
Индексы можно задавать явно:
Делать выборку по нескольким индексам и осуществлять групповое присваивание:
Фильтровать Series как душе заблагорассудится, а также применять математические операции и многое другое:
Если Series напоминает нам словарь, где ключом является индекс, а значением сам элемент, то можно сделать так:
У объекта Series и его индекса есть атрибут name, задающий имя объекту и индексу соответственно.
Индекс можно поменять "на лету", присвоив список атрибуту index объекта Series
Имейте в виду, что список с индексами по длине должен совпадать с количеством элементов в Series.
DataFrame
Объект DataFrame лучше всего представлять себе в виде обычной таблицы и это правильно, ведь DataFrame является табличной структурой данных. В любой таблице всегда присутствуют строки и столбцы. Столбцами в объекте DataFrame выступают объекты Series, строки которых являются их непосредственными элементами.
DataFrame проще всего сконструировать на примере питоновского словаря:
Чтобы убедиться, что столбец в DataFrame это Series, извлекаем любой:
Объект DataFrame имеет 2 индекса: по строкам и по столбцам. Если индекс по строкам явно не задан (например, колонка по которой нужно их строить), то pandas задаёт целочисленный индекс RangeIndex от 0 до N-1, где N это количество строк в таблице.
В таблице у нас 4 элемента от 0 до 3.
Доступ по индексу в DataFrame
Индекс по строкам можно задать разными способами, например, при формировании самого объекта DataFrame или "на лету":
Как видно, индексу было задано имя - Country Code. Отмечу, что объекты Series из DataFrame будут иметь те же индексы, что и объект DataFrame:
Доступ к строкам по индексу возможен несколькими способами:
- .loc - используется для доступа по строковой метке
- .iloc - используется для доступа по числовому значению (начиная от 0)
Можно делать выборку по индексу и интересующим колонкам:
Как можно заметить, .loc в квадратных скобках принимает 2 аргумента: интересующий индекс, в том числе поддерживается слайсинг и колонки.
Фильтровать DataFrame с помощью т.н. булевых массивов:
Кстати, к столбцам можно обращаться, используя атрибут или нотацию словарей Python, т.е. df.population и df['population'] это одно и то же.
Сбросить индексы можно вот так:
pandas при операциях над DataFrame, возвращает новый объект DataFrame.
Добавим новый столбец, в котором население (в миллионах) поделим на площадь страны, получив тем самым плотность:
Не нравится новый столбец? Не проблема, удалим его:
Особо ленивые могут просто написать del df['density'].
Переименовывать столбцы нужно через метод rename:
В этом примере перед тем как переименовать столбец Country Code, убедитесь, что с него сброшен индекс, иначе не будет никакого эффекта.
Чтение и запись данных
pandas поддерживает все самые популярные форматы хранения данных: csv, excel, sql, буфер обмена, html и многое другое:
Чаще всего приходится работать с csv-файлами. Например, чтобы сохранить наш DataFrame со странами, достаточно написать:
Функции to_csv ещё передаются различные аргументы (например, символ разделителя между колонками) о которых подробнее можно узнать в официальной документации.
Считать данные из csv-файла и превратить в DataFrame можно функцией read_csv.
Аргумент sep указывает разделитесь столбцов. Существует ещё масса способов сформировать DataFrame из различных источников, но наиболее часто используют CSV, Excel и SQL. Например, с помощью функции read_sql, pandas может выполнить SQL запрос и на основе ответа от базы данных сформировать необходимый DataFrame. За более подробной информацией стоит обратиться к официальной документации.
Группировка и агрегирование в pandas
Необходимо подсчитать, сколько женщин и мужчин выжило, а сколько нет. В этом нам поможет метод .groupby.
А теперь проанализируем в разрезе класса кабины:
Сводные таблицы в pandas
Термин "сводная таблица" хорошо известен тем, кто не по наслышке знаком с инструментом Microsoft Excel или любым иным, предназначенным для обработки и анализа данных. В pandas сводные таблицы строятся через метод .pivot_table. За основу возьмём всё тот же пример с Титаником. Например, перед нами стоит задача посчитать сколько всего женщин и мужчин было в конкретном классе корабля:
В качестве индекса теперь у нас будет пол человека, колонками станут значения из PClass, функцией агрегирования будет count (подсчёт количества записей) по колонке Name.
Всё очень просто.
Анализ временных рядов
В pandas очень удобно анализировать временные ряды. В качестве показательного примера я буду использовать цену на акции корпорации Apple за 5 лет по дням. Файл с данными можно скачать тут.
Здесь мы формируем DataFrame с DatetimeIndex по колонке Date и сортируем новый индекс в правильном порядке для работы с выборками. Если колонка имеет формат даты и времени отличный от ISO8601, то для правильного перевода строки в нужный тип, можно использовать метод pandas.to_datetime.
Давайте теперь узнаем среднюю цену акции (mean) на закрытии (Close):
А если взять промежуток с февраля 2012 по февраль 2015 и посчитать среднее:
А что если нам нужно узнать среднюю цену закрытия по неделям?!
Resampling мощный инструмент при работе с временными рядами (time series), помогающий переформировать выборку так, как удобно вам. Метод resample первым аргументом принимает строку rule. Все доступные значения можно найти в документации.
Визуализация данных в pandas
Для визуального анализа данных, pandas использует библиотеку matplotlib. Продемонстрирую простейший способ визуализации в pandas на примере с акциями Apple.
Берём цену закрытия в промежутке между 2012 и 2017.
И видим вот такую картину:
По оси X, если не задано явно, всегда будет индекс. По оси Y в нашем случае цена закрытия. Если внимательно посмотреть, то в 2014 году цена на акцию резко упала, это событие было связано с тем, что Apple проводила сплит 7 к 1. Так мало кода и уже более-менее наглядный анализ ;)
Эта заметка демонстрирует лишь малую часть возможностей pandas. Со своей стороны я постараюсь по мере своих сил обновлять и дополнять её.
В этой статье мы познакомимся с DataFrame из библиотеки Pandas и узнаем как они хранят информацию. Затем мы создадим их вручную и из файлов, а также рассмотрим способы манипуляции данными внутри них.
Вступление
Pandas – библиотека Python с открытым исходным кодом для анализа данных. Она предназначена для эффективной и интуитивной обработки структурированных данных.
В этой статье мы рассматрим наиболее распространенные способы создания DataFrame и методы изменения их структуры.
Мы будем использовать блокнот Jupyter, так как он предлагает хорошее визуальное представление DataFrames. Однако любая среда IDE также выполнит эту работу, просто вызвав инструкцию print() для объекта DataFrame.
Создание DataFrame
Каждый раз, когда создается DataFrame, независимо от того, создается ли он вручную или создается из источника данных, например файла, данные должны упорядочиваться в табличном виде как последовательности строк с данными.
Это означает, что строки имеют одинаковый порядок полей, т.е. если требуется DataFrame с информацией об имени и возрасте человека, необходимо убедиться, что все строки содержат информацию одинаково.
Любое несоответствие приведет к тому, что DataFrame будет неисправен, что приведет к ошибкам.
Создание пустого DataFrame
Создать пустой DataFrame так же просто, как:
Рассмотрим, как можно добавлять строки и столбцы в этот пустой DataFrame при управлении их структурой.
Создание DataFrame из списков
Такого же эффекта можно было бы достичь, если бы данные находились в нескольких списках и были объединены вместе с помощью zip(). Этот подход может быть использован, когда данные, которые мы имеем, предоставляются в виде списков значений для одного столбца (поля), вместо вышеупомянутого способа, в котором список содержит данные для каждой конкретной строки.
Это означает, что у нас есть все данные (по порядку) для столбцов по отдельности, которые, будучи сжатыми вместе, создают строки.
Возможно, вы заметили, что метки столбцов и строк не очень информативны в созданном нами DataFrame. Можно передать эту информацию при создании DataFrame.
Что даёт нам тот же результат, что и раньше, только с более значимыми именами столбцов:
Другим представлением данных, которое можно использовать здесь, является предоставление данных в виде списка словарей в следующем формате:
В нашем примере представление будет выглядеть следующим образом:
И мы создадим DataFrame таким же образом, как и раньше:
Создание DataFrame из словарей
Словари являются еще одним способом предоставления данных в виде столбцов. Каждому столбцу присваивается упорядоченный список строк значений.
Давайте представим те же данные, что и раньше, но в формате словаря:
Что дает нам ожидаемый результат:
Чтение DataFrame из файла
Для чтения и записи DataFrames поддерживается множество типов файлов. Каждая функция соответствует типу файла, например read_csv(), read_excel(), read_json(), read_html() и т.д.
Наиболее распространенным типом файла является .csv (значения разделенные запятыми). Строки состоят из значений, разделенных специальным символом (чаще всего запятой). Можно задать другой разделитель с помощью аргумента sep.
Если вы не знакомы с типом файла .csv , вот пример того, как он выглядит:
Обратите внимание, что первой строкой в файле являются имена столбцов. Конечно, можно указать, с какой строки Pandas должен начать считывать данные, но по умолчанию Pandas рассматривает первую строку как имена столбцов и начинает загрузку данных из второй строки:
Что дает нам на выходе:
Манипулирование Фреймами Данных
В этом разделе рассматриваются основные методы изменения структуры DataFrame. Однако прежде чем перейти к этой теме, необходимо знать, как получить доступ к отдельным строкам или группам строк, а также к столбцам.
Доступ/Расположение Элементов
Pandas имеет два разных способа выбора данных – loc[] и iloc[].
loc[] позволяет выбирать строки и столбцы с помощью меток, таких как row[‘Value’] и culumn[‘Other Value’]. В то же время, iloc[] принимает индекс записей, которые вы хотите выбрать, поэтому вы можете использовать только числа. Можно также выбрать столбцы, просто передав их имя в скобки. Посмотрим, как это работает в действии:
Это также работает для группы строк, от 0 до n:
Важно отметить, что iloc[] всегда ожидает целое число. loc[] поддерживает и другие типы данных. Здесь мы также можем использовать целое число на ряду с другими типами данных, например строки.
Также можно получить доступ к определенным значениям для элементов. Например, может потребоваться получить доступ к элементу во 2-й строке, но вернуть только его значение Name:
Доступ к столбцам так же прост, как запись dataFrameName.ColumnName или dataFrameName [‘ColumnName’]. Второй вариант предпочтителен, так как столбец может иметь то же имя, что и зарезервированное имя в Pandas, и использование первого варианта в этом случае может вызвать ошибки:
Доступ к столбцам можно также получить с помощью loc[] и iloc[]. Например, мы получим доступ ко всем строкам, начиная с 0…n, где n – количество строк, и выберем первый столбец. Вывод совпадает с выводом предыдущей строки кода:
Манипулирование Индексами
Индексы – это метки строк в DataFrame и именно их мы используем при обращении к строкам. Поскольку мы не изменили индексы по умолчанию, которые Pandas присваивают DataFrame при создании, все наши строки были помечены целыми числами от 0 и выше.
Первый способ изменить индексацию вашего DataFrame – это использовать метод set_index() . Мы передаем любой из столбцов в вашем DataFrame этому методу, и он становится новым индексом. Таким образом, мы можем либо сами создавать индексы, либо просто назначить столбец в качестве индекса.
Обратите внимание, что метод не изменяет исходный DataFrame, а вместо этого возвращает новый DataFrame с новым индексом, поэтому мы должны назначить возвращаемое значение переменной DataFrame, если мы хотим сохранить изменение, или установить флаг inplace равным True:
Это будет работать так же хорошо:
Теперь, когда у нас есть нестандартный индекс, мы можем использовать новый набор значений, используя reindex(), Pandas автоматически заполнит значения NaN для каждого индекса, который не может быть сопоставлен с существующей строкой:
Вы можете контролировать, какое значение Pandas использует для заполнения пропущенных значений, установив необязательный параметр fill_value :
Поскольку мы установили новый индекс для нашего DataFrame, loc[] теперь работает с этим индексом:
Манипулирование строками (rows)
Добавление и удаление строк становится простым, если удобно использовать loc[]. Если задать несуществующую строку, она будет создана:
И если вы хотите удалить строку, вы указываете ее индекс функции drop () . Он принимает необязательный параметр axis . Ось | принимает 0 / индекс или 1 / колонки . В зависимости от этого функция drop() отбрасывает либо вызываемую строку, либо вызываемый столбец.
Если требуется удалить строку, необходимо указать ее индекс для функции drop(). Она принимает необязательный параметр, axis. Axis может быть 0/index или 1/columns. В зависимости от этого функция drop() удаляет строку или столбец для которого она была вызвана.
Если не указать значение параметра axis , то соответствующая строка будет удалена по умолчанию, так как axis 0 по умолчанию:
Если не указать значение параметра axis, соответствующая строка будет удалена по умолчанию, так как axis по умолчанию равен 0:
Вы также можете переименовать строки, которые уже существуют в таблице. Функция rename() принимает словарь изменений, которые вы хотите внести:
Обратите внимание, что drop() и rename() также принимают необязательный параметр inplace . Установка этого параметра в True ( False по умолчанию) скажет Pandas изменить исходный DataFrame вместо того, чтобы возвращать новый. Если оставить его не заданным, вам придется упаковать полученный DataFrame в новый, чтобы сохранить изменения.
Другим полезным методом, о котором следует знать, является функция drop_duplicates(), которая удаляет все повторяющиеся строки из DataFrame. Давайте продемонстрируем это, добавив две повторяющиеся строки:
Что дает нам выход:
Теперь мы можем вызвать drop_duplicates() :
И дубликаты строк будут удалены:
Манипулирование столбцами (columns)
Новые столбцы можно добавлять аналогично добавлению строк:
Также, как и строки, столбцы можно удалить, вызвав функцию drop() , с той лишь разницей, что вы должны установить необязательный параметр axis в значение 1 чтобы Pandas знали, что вы хотите удалить столбец, а не строку:
Когда речь идет о переименовании столбцов, функции rename() нужно сказать конкретно, что мы хотим изменить столбцы, установив необязательные параметр columns значение нашего “словаря изменений”:
Опять же, как и при удалении/переименовании строк, вы можете установить необязательный параметр на месте в True если вы хотите, чтобы исходный DataFrame был изменен вместо функции, возвращающей новый DataFrame .
Опять же, как и при удалении/переименовании строк, можно установить для параметра inplace значение True, если требуется изменить исходный DataFrame вместо создания нового DataFrame.
Вывод
В этой статье мы рассмотрели, что такое Pandas DataFrame s, поскольку они являются ключевым классом из фреймворка Pandas, используемого для хранения данных.
В этой статье мы рассмотрели, что такое Pandas DataFrame, поскольку он является ключевым классом фреймворка Pandas для хранения данных.
Мы научились создавать DataFrame вручную, используя список и словарь, после чего считывали данные из файла.
Затем мы манипулировали данными в DataFrame – используя loc[] и iloc[] , мы находили данные, создавали новые строки и столбцы, переименовывали существующие и затем удаляли их.
Затем мы манипулировали данными в DataFrame используя loc[] и iloc[]. Мы обнаружили данные, создали новые строки и столбцы, переименовали существующие, а затем удалили их.
При работе с Dataframe в Pandas одной из распространённой задачей является добавление нового столбца. В этой статье мы рассмотрим несколько способов, как это можно сделать.
Для работы нам понадобится учебный пример:
import pandas as pd
city_data = 'Город':['Москва', 'Казань', 'Владивосток', 'Санкт-Петербург', 'Калининград'],
'Дата основания':['1147', '1005', '1860', '1703', '1255'],
'Площадь':['2511', '516', '331', '1439', '223'],
'Население':['11,9', '1,2', '0,6', '4,9', '0,4'],
'Погода':['8', '8', '17', '9', '12'] >
city_df = pd.DataFrame(city_data)
city_df
Теперь у нас есть сформированный Pandas Dataframe, к которому мы будем добавлять новые столбцы разными способами.
Способ 1. Добавление столбца в Pandas при помощи списка
Давайте сформируем новый список, который будет соответствовать содержанию нового столбца:
Способ 2. Добавление столбца в Pandas при помощи метода insert()
Встроенный в Pandas метод insert() позволяет добавлять столбцы при помощи одной строки кода. Его синтаксис следующий:
insert(loc, column, value, allow_duplicates = False), где
- loc – номер столбца справа, после которого мы хотим добавить новый столбец
- column – название столбца
- value – значения строк в столбце в виде списка
- allow_duplicates – параметр, определяющий можно ли создавать столбец с одинаковым названием.
Давайте применим этот метод, добавив англоязычные названия городов, при этом поставим столбец после названия города на русском языке:
city_df.insert(1, "City", ['Moscow', 'Kazan', 'Vladivostok', 'St. Petersburg', 'Kaliningrad'], False)
city_df
Способ 3. Добавление столбца в Pandas при помощи словаря и метода map()
Этот способ будет полезен в том случае, когда нам нужно создать столбец и вставить в него данные, сопоставляя их с информацией из существующего столбца.
Итак, создаем словарь, в котором первым параметром идет ключ, соответствующий значению существующего столбца, вторым – новый показатель.
Это были основные три способа, с помощью которых можно добавлять столбцы в Pandas. Хотите попрактиковаться сами – скачайте наш ноутбук по этому уроку и вперед.
Я хочу преобразовать таблицу, представленную как список списков, в Pandas DataFrame. В качестве чрезвычайно упрощенного примера:
Каков наилучший способ преобразования столбцов в соответствующие типы, в этом случае столбцы 2 и 3 в поплавки? Есть ли способ указать типы при преобразовании в DataFrame? Или лучше сначала создать DataFrame, а затем пропустить столбцы, чтобы изменить тип для каждого столбца? В идеале я хотел бы сделать это динамически, потому что может быть сотни столбцов, и я не хочу точно указывать, какие столбцы имеют тип. Все, что я могу гарантировать, состоит в том, что каждый столбец содержит значения одного и того же типа.
ОТВЕТЫ
Ответ 1
У вас есть три основных варианта для преобразования типов в пандах:
to_numeric() - предоставляет функциональные возможности для безопасного преобразования нечисловых типов (например, строк) в подходящий числовой тип. (Смотрите также to_datetime() и to_timedelta() .)
astype() - преобразует (почти) любой тип в (почти) любой другой тип (даже если это не всегда целесообразно). Также позволяет конвертировать в категориальные типы (очень полезно).
infer_objects() - служебный метод для преобразования столбцов объектов, содержащих объекты Python, в тип панд, если это возможно.
Продолжайте читать для более подробных объяснений и использования каждого из этих методов.
Лучший способ преобразовать один или несколько столбцов DataFrame в числовые значения - это использовать pandas.to_numeric() .
Эта функция попытается преобразовать нечисловые объекты (например, строки) в целые числа или числа с плавающей запятой, в зависимости от ситуации.
Основное использование
Как видите, новая серия возвращается. Не забудьте назначить этот вывод переменной или столбцу для продолжения его использования:
Вы также можете использовать его для преобразования нескольких столбцов DataFrame с помощью метода apply() :
Пока ваши значения могут быть преобразованы, это, вероятно, все, что вам нужно.
Обработка ошибок
Но что, если некоторые значения не могут быть преобразованы в числовой тип?
to_numeric() также принимает аргумент ключевого слова errors который позволяет принудительно указывать для нечисловых значений значение NaN или просто игнорировать столбцы, содержащие эти значения.
Вот пример использования серии строк s которая имеет объект dtype:
Вместо того, чтобы терпеть неудачу, мы могли бы хотеть, чтобы 'панды' считались отсутствующим/плохим числовым значением. Мы можем привести недействительные значения к NaN следующим образом, используя аргумент errors :
Третий вариант для errors - просто игнорировать операцию, если встречается недопустимое значение:
Этот последний вариант особенно полезен, когда вы хотите преобразовать весь свой DataFrame, но не знаете, какие из наших столбцов можно надежно преобразовать в числовой тип. В этом случае просто напишите:
Функция будет применена к каждому столбцу DataFrame. Столбцы, которые можно преобразовать в числовой тип, будут преобразованы, тогда как столбцы, которые не могут (например, содержат нецифровые строки или даты), будут оставлены в покое.
понижающее приведение
По умолчанию преобразование с помощью to_numeric() даст вам int64 или float64 dtype (или любую целую ширину, присущую вашей платформе).
Обычно это то, что вы хотите, но что, если вы хотите сэкономить память и использовать более компактный dtype, такой как float32 или int8 ?
to_numeric() дает вам возможность понижать до целых чисел, со to_numeric() , без знака, с плавающей точкой. Вот пример для простой серии s целочисленного типа:
Понижение до "целого" использует наименьшее возможное целое число, которое может содержать значения:
Даункастинг до 'float' аналогично выбирает плавающий тип меньше обычного:
Метод astype() позволяет вам четко указывать dtype, который вы хотите иметь в своем DataFrame или Series. Он очень универсален в том, что вы можете попробовать перейти от одного типа к другому.
Основное использование
Просто выберите тип: вы можете использовать dum типа NumPy (например, np.int16 ), некоторые типы Python (например, bool) или типы, специфичные для панд (например, категориальный dtype).
Вызовите метод для объекта, который вы хотите преобразовать, и astype() попытается преобразовать его для вас:
Заметьте, я сказал "попробуй" - если astype() не знает, как преобразовать значение в Series или DataFrame, это вызовет ошибку. Например, если у вас есть значение NaN или inf вы получите ошибку, пытаясь преобразовать его в целое число.
Начиная с панд 0.20.0, эта ошибка может быть подавлена передачей errors='ignore' . Ваш оригинальный объект будет возвращен нетронутым.
Быть осторожен
astype() является мощным, но иногда он будет преобразовывать значения "неправильно". Например:
Преобразование сработало, но -7 было округлено до 249 (то есть 2 8 - 7)!
Попытка pd.to_numeric(s, downcast='unsigned') использованием pd.to_numeric(s, downcast='unsigned') вместо этого может помочь предотвратить эту ошибку.
Версия 0.21.0 pandas представила метод infer_objects() для преобразования столбцов DataFrame, имеющих тип данных объекта, в более конкретный тип (мягкие преобразования).
Например, вот DataFrame с двумя столбцами типа объекта. Один содержит действительные целые числа, а другой содержит строки, представляющие целые числа:
Используя infer_objects() , вы можете изменить тип столбца 'a' на int64:
Столбец "b" остался один, поскольку его значения были строками, а не целыми числами. Если вы хотите попытаться преобразовать оба столбца в целочисленный тип, вместо этого вы можете использовать df.astype(int) .
Ответ 2
Как насчет этого?
Ответ 3
этот ниже код изменит тип данных столбца.
вместо типа данных вы можете указать свой тип данных. Что вы хотите, например, str, float, int и т.д.
Ответ 4
Вот функция, которая принимает в качестве своих аргументов DataFrame и список столбцов и коэрцирует все данные в столбцах в числа.
Итак, для вашего примера:
Ответ 5
Как создать два фрейма данных, каждый с разными типами данных для своих столбцов, а затем добавить их вместе?
Результаты
После создания фрейма данных вы можете заполнить его переменными с плавающей запятой в 1-м столбце и строки (или любой желаемый тип данных) во втором столбце.
Ответ 6
Когда мне нужно было указать только определенные столбцы, и я хочу быть явным, я использовал (для DOCS LOCATION):
Итак, используя оригинальный вопрос, но предоставив ему имена столбцов.
Ответ 7
Я думал, что у меня та же проблема, но на самом деле у меня есть небольшая разница, которая облегчает решение проблемы. Для других, смотрящих на этот вопрос, стоит проверить формат вашего входного списка. В моем случае числа изначально плавающие, а не строки, как в вопросе:
но слишком много обрабатывая список перед созданием кадра данных, я теряю типы, и все становится строкой.
Создание фрейма данных через массив NumPy
дает тот же кадр данных, что и в вопросе, где записи в столбцах 1 и 2 рассматриваются как строки. Однако делать
Читайте также: