pandas.read_xml#

pandas.read_xml(path_or_buffer, *, xpath='./*', namespaces=None, elems_only=False, attrs_only=False, names=None, dtype=None, converters=None, parse_dates=None, encoding='utf-8', parser='lxml', stylesheet=None, iterparse=None, compression='infer', storage_options=None, dtype_backend=)[источник]#

Чтение XML-документа в DataFrame объект.

Добавлено в версии 1.3.0.

Параметры:
path_or_bufferstr, объект пути или файлоподобный объект

Строка, объект пути (реализующий os.PathLike[str]), или файлоподобный объект, реализующий read() функция. Строка может быть любой допустимой XML строкой или путем. Строка также может быть URL. Допустимые схемы URL включают http, ftp, s3 и file.

Устарело с версии 2.1.0: Передача строковых литералов XML устарела. Оберните литеральный XML-ввод в io.StringIO или io.BytesIO вместо этого.

xpathstr, optional, default './*'

The XPath для разбора необходимого набора узлов для миграции в DataFrame.``XPath`` должен возвращать коллекцию элементов, а не один элемент. Примечание: etree парсер поддерживает ограниченный XPath выражения. Для более сложных XPath, используйте lxml что требует установки.

пространства имёнdict, optional

Пространства имён, определённые в XML-документе, как словари, где ключ — префикс пространства имён, а значение — URI. Нет необходимости включать все пространства имён из XML, только те, которые используются в xpath выражение. Примечание: если XML-документ использует пространство имен по умолчанию, обозначенное как xmlns='' без префикса, вы должны назначить любой временный пространство имен префикса, например 'doc', URI, чтобы разобрать основные узлы и/или атрибуты. Например,

namespaces = {"doc": "https://example.com"}
elems_onlybool, optional, default False

Разобрать только дочерние элементы на указанном xpath. По умолчанию, возвращаются все дочерние элементы и непустые текстовые узлы.

attrs_onlybool, optional, default False

Разбирать только атрибуты на указанном xpath. По умолчанию возвращаются все атрибуты.

namesподобный списку, опционально

Названия столбцов для DataFrame с распарсенными XML-данными. Используйте этот параметр для переименования исходных имен элементов и различения элементов и атрибутов с одинаковыми именами.

dtypeИмя типа или словарь столбец -> тип, опционально

Тип данных для данных или столбцов. Например, {'a': np.float64, 'b': np.int32, 'c': 'Int64'} Используйте str или object вместе с подходящими na_values настройки для сохранения и не интерпретации типа данных. Если указаны преобразователи, они будут применены ВМЕСТО преобразования типа данных.

Добавлено в версии 1.5.0.

конвертерыdict, optional

Словарь функций для преобразования значений в определенных столбцах. Ключами могут быть либо целые числа, либо метки столбцов.

Добавлено в версии 1.5.0.

parse_datesbool или список int или имена или список списков или dict, по умолчанию False

Идентификаторы для преобразования индекса или столбцов в datetime. Поведение следующее:

  • boolean. Если True -> попытаться разобрать индекс.

  • список целых чисел или имён. Например, если [1, 2, 3] -> попытаться разобрать столбцы 1, 2, 3 как отдельные столбцы с датами.

  • список списков. Например, если [[1, 3]] -> объединить столбцы 1 и 3 и обработать как один столбец даты.

  • словарь, например {‘foo’ : [1, 3]} -> обрабатывать столбцы 1, 3 как дату и называть результат ‘foo’

Добавлено в версии 1.5.0.

кодировкаstr, опционально, по умолчанию 'utf-8'

Кодировка XML-документа.

parser{‘lxml’,’etree’}, по умолчанию ‘lxml’

Модуль парсера для извлечения данных. Поддерживаются только ‘lxml’ и ‘etree’. С ‘lxml’ более сложные XPath поиски и возможность использования таблицы стилей XSLT поддерживаются.

stylesheetstr, объект пути или файлоподобный объект

URL, файлоподобный объект или сырая строка, содержащая скрипт XSLT. Этот стиль должен упрощать сложные, глубоко вложенные XML-документы для более лёгкого парсинга. Чтобы использовать эту функцию, у вас должен быть lxml модуль установлен и укажите 'lxml' как parser. xpath должен ссылаться на узлы преобразованного XML-документа, сгенерированного после XSLT-преобразования, а не на исходный XML-документ. В настоящее время поддерживаются только скрипты XSLT 1.0, а не более поздние версии.

iterparsedict, optional

Узлы или атрибуты для извлечения при итеративном разборе XML-документа в виде словаря, где ключ — имя повторяющегося элемента, а значение — список элементов или имен атрибутов, являющихся потомками повторяющегося элемента. Примечание: если используется эта опция, она заменит xpath разбор и в отличие от xpath, потомки не обязательно должны быть связаны друг с другом, но могут существовать где угодно в документе под повторяющимся элементом. Этот эффективный по памяти метод следует использовать для очень больших XML-файлов (500 МБ, 1 ГБ или 5 ГБ+). Например,

iterparse = {"row_element": ["child_elem", "attr", "grandchild_elem"]}

Добавлено в версии 1.5.0.

compressionстрока или словарь, по умолчанию ‘infer’

Для динамической декомпрессии данных на диске. Если 'infer' и 'path_or_buffer' является путем, то определить сжатие по следующим расширениям: '.gz', '.bz2', '.zip', '.xz', '.zst', '.tar', '.tar.gz', '.tar.xz' или '.tar.bz2' (в противном случае сжатие отсутствует). Если используется 'zip' или 'tar', ZIP-файл должен содержать только один файл данных для чтения. Установить в None для отсутствия распаковки. Также может быть словарём с ключом 'method' установить в одно из {'zip', 'gzip', 'bz2', 'zstd', 'xz', 'tar'} и другие пары ключ-значение передаются в zipfile.ZipFile, gzip.GzipFile, bz2.BZ2File, zstandard.ZstdDecompressor, lzma.LZMAFile или tarfile.TarFile, соответственно. В качестве примера, следующее может быть передано для декомпрессии Zstandard с использованием пользовательского словаря сжатия: compression={'method': 'zstd', 'dict_data': my_compression_dict}.

Добавлено в версии 1.5.0: Добавлена поддержка для .tar файлы.

Изменено в версии 1.4.0: Поддержка Zstandard.

storage_optionsdict, optional

Дополнительные параметры, которые имеют смысл для конкретного соединения с хранилищем, например, хост, порт, имя пользователя, пароль и т.д. Для HTTP(S) URL пары ключ-значение передаются в urllib.request.Request в качестве параметров заголовка. Для других URL-адресов (например, начинающихся с "s3://" и "gcs://") пары ключ-значение передаются fsspec.open. Пожалуйста, смотрите fsspec и urllib для получения дополнительной информации, а для дополнительных примеров по опциям хранения см. здесь.

dtype_backend{'numpy_nullable', 'pyarrow'}, по умолчанию 'numpy_nullable'

Тип данных бэкенда, примененный к результирующему DataFrame (все еще экспериментальная). Поведение следующее:

  • "numpy_nullable": возвращает поддерживаемый нуллифицируемым типом данных DataFrame (по умолчанию).

  • "pyarrow": возвращает nullable на основе pyarrow ArrowDtype DataFrame.

Добавлено в версии 2.0.

Возвращает:
df

DataFrame.

Смотрите также

read_json

Преобразовать строку JSON в объект pandas.

read_html

Чтение HTML-таблиц в список объектов DataFrame.

Примечания

Этот метод лучше всего подходит для импорта неглубоких XML-документов в следующем формате, который идеально подходит для двух измерений DataFrame (строка на столбец).

<root>
    <row>
      <column1>datacolumn1>
      <column2>datacolumn2>
      <column3>datacolumn3>
      ...
   row>
   <row>
      ...
   row>
   ...
root>

Как формат файлов, XML-документы могут быть спроектированы любым способом, включая расположение элементов и атрибутов, пока они соответствуют спецификациям W3C. Поэтому этот метод является удобным обработчиком для конкретного плоского дизайна, а не для всех возможных структур XML.

Однако для более сложных XML-документов, stylesheet позволяет вам временно перепроектировать исходный документ с помощью XSLT (специального языка) для более плоской версии для миграции в DataFrame.

Эта функция будет всегда возвращает один DataFrame или вызывать исключения из-за проблем с XML-документом, xpath, или другие параметры.

См. Документация read_xml в разделе IO документации для получения дополнительной информации об использовании этого метода для разбора XML файлов в DataFrames.

Примеры

>>> from io import StringIO
>>> xml = '''
... 
...  
...    square
...    360
...    4.0
...  
...  
...    circle
...    360
...    
...  
...  
...    triangle
...    180
...    3.0
...  
... '''
>>> df = pd.read_xml(StringIO(xml))
>>> df
      shape  degrees  sides
0    square      360    4.0
1    circle      360    NaN
2  triangle      180    3.0
>>> xml = '''
... 
...   
...   
...   
... '''
>>> df = pd.read_xml(StringIO(xml), xpath=".//row")
>>> df
      shape  degrees  sides
0    square      360    4.0
1    circle      360    NaN
2  triangle      180    3.0
>>> xml = '''
... 
...   
...     square
...     360
...     4.0
...   
...   
...     circle
...     360
...     
...   
...   
...     triangle
...     180
...     3.0
...   
... '''
>>> df = pd.read_xml(StringIO(xml),
...                  xpath="//doc:row",
...                  namespaces={"doc": "https://example.com"})
>>> df
      shape  degrees  sides
0    square      360    4.0
1    circle      360    NaN
2  triangle      180    3.0
>>> xml_data = '''
...         
...            
...               0
...               1
...               2.5
...               True
...               a
...               2019-12-31 00:00:00
...            
...            
...               1
...               4.5
...               False
...               b
...               2019-12-31 00:00:00
...            
...         
...         '''
>>> df = pd.read_xml(StringIO(xml_data),
...                  dtype_backend="numpy_nullable",
...                  parse_dates=["e"])
>>> df
   index     a    b      c  d          e
0      0     1  2.5   True  a 2019-12-31
1      1    4.5  False  b 2019-12-31