Как я могу эффективно загружать данные по вопросам переполнения стека с помощью pandas read_clipboard?
Я заметил, что многие вопросы pandas о переполнении стека включают только несколько строк своих данных в виде текста без сопутствующего кода для его генерации / воспроизведения. Мне известно о существовании, read_clipboardно я не могу понять, как эффективно вызывать эту функцию для чтения данных во многих ситуациях, например, когда есть пробелы в именах заголовков или объекты Python, такие как списки в столбцах.
Как я могу pd.read_clipboard
более эффективно читать данные, вставленные в нестандартные форматы, которые не поддаются легкому чтению с использованием аргументов по умолчанию? Бывают ли ситуации, когда read_clipboard
не хватает?
Ответы
read_clipboard: Руководство для начинающих
read_clipboardдействительно спасительная благодать для тех, кто только начинает отвечать на вопросы в теге pandas . К сожалению, ветераны панд также знают, что данные, представленные в вопросах, не всегда легко загрузить в терминал из-за различных сложностей в формате публикуемых данных.
К счастью, у read_clipboard
него есть аргументы, которые делают возможным (и легким) рассмотрение большинства этих случаев. Вот несколько распространенных вариантов использования и соответствующие аргументы.
Общие варианты использования
read_clipboard
использует read_csv
под капотом с разделителем пробелов, поэтому здесь применимы многие методы анализа данных из CSV, например
анализ столбцов с пробелами в данных
использовать
sep
с аргументом регулярного выражения. Во-первых, убедитесь, что между столбцами есть не менее двух пробелов и не более одного последовательного пробела внутри самих данных столбца. Затем вы можете использовать,sep=r'\s{2,}'
что означает «отдельные столбцы, ища по крайней мере два последовательных пробела для разделителя» (примечание:engine='python'
требуется для разделителей с несколькими символами или регулярными выражениями):df = pd.read_clipboard(..., sep=r'\s{2,}', engine='python')
Также см. Как вы обрабатываете имена столбцов с пробелами при использовании pd.read_clipboard? .
чтение серии вместо DataFrame
использование
squeeze=true
, вам, вероятно, также понадобится,header=None
если первая строка также является данными.s = pd.read_clipboard(..., header=None, squeeze=True)
Также см. Может ли быть более простой способ использовать pandas read_clipboard для чтения серии? .
загрузка данных с пользовательскими именами заголовков
использовать
names=[...]
вместе с существующими заголовкамиheader=None
иskiprows=[0]
игнорировать их.df = pd.read_clipboard(..., header=None, names=['a', 'b', 'c'], skiprows=[0])
загрузка данных без заголовков
- использовать
header=None
- использовать
установить один или несколько столбцов в качестве индекса
- использовать
index_col=[...]
с соответствующей этикеткой или индексом
- использовать
анализ дат
- используйте
parse_dates
соответствующий формат. Еслиdatetimes
выполняется синтаксический анализ (т.е. столбцы с датой, разделенной меткой времени), вам, вероятно, также потребуется использовать,sep=r'\s{2,}'
при этом убедитесь, что ваши столбцы разделены как минимум двумя пробелами.
- используйте
См. Этот мой ответ для более полного списка read_csv
аргументов для других случаев, не рассмотренных здесь ...
Предостережения
read_clipboard
это швейцарский армейский нож. Однако это
не может читать данные в довольно табличных / табличных форматах (IOW, границы усложняют задачу)
- См. Раздел « Чтение в красиво напечатанном / отформатированном фрейме данных с использованием pd.read_clipboard?» для решения этой проблемы.
не может правильно анализировать MultIndexes, если не указаны все элементы в индексе.
- См. Копирование фреймов данных MultiIndex с помощью pd.read_clipboard? для решения этой проблемы.
не может игнорировать / обрабатывать эллипсы в данных
- мой предлагаемый метод - вручную удалить эллипсы перед печатью
не может анализировать столбцы списков (или других объектов) как что-либо, кроме строки. Столбцы нужно будет преобразовать отдельно, как показано в разделе Как читать в фрейме данных со списками с помощью pd.read_clipboard? .
не может читать текст с изображений (поэтому, пожалуйста, не используйте изображения как средство для обмена данными с людьми, пожалуйста!)
Единственная слабость этой функции в том, что она не захватывает содержимое, CTRL + C
если копирование выполняется из PDF
файла. Такое тестирование приводит к пустому чтению.
Но при использовании обычного текстового редактора все идет нормально. Вот пример использования произвольно набранного текста:
>>> pd.read_clipboard()
Empty DataFrame
Columns: [sfsesfsdsxcvfsdf]
Index: []