import pandas df = pandas.read_fwf(filepath_or_buffer, *, colspecs='infer', widths=None, infer_nrows=100, dtype_backend='numpy_nullable', iterator=False, chunksize=None, **kwds)
filepath_or_buffer
- любой допустимый путь в виде строки. Строка может быть URL. Допустимые схемы URL включают http(s)
, ftp(s)
, s3
, gs
и file
. Для URL-адресов файлов ожидается host
. Локальным файлом может быть: file://localhost/path/to/table.csv
.
Если необходимо передать объект pathlib
, то этот аргумент принимает любой оs.PathLike
.
Аргумент также поддерживает объекты подобные открытому файлу, у которых есть метод file.read()
, такие как дескриптор файла (например, открытый файл open()
) или io.StringIO
.
colspecs='infer'
- список пар (кортежей), задающий размеры полей фиксированной ширины каждой строки в виде полуоткрытых интервалов (т. е. [from, to[
). Чтобы синтаксический анализатор pandas
попытался сам определить характеристики столбца из первых 100 строк данных, можно указать строковое значение 'infer'
. Поведение по умолчанию 'infer'
.
widths=None
- список ширин полей, который можно использовать вместо colspecs
, если интервалы смежные.
infer_nrows=100
- количество строк, которое следует учитывать при автоматическом определять colspecs
.
iterator=False
- возвращает объект TextFileReader
для итерации или получения фрагментов с помощью get_chunk()
.
chunksize=None
- количество строк для чтения фрагмента из файла. Передача значения приведет к тому, что функция вернет объект TextFileReader
для итерации.
**kwds
- необязательные ключевые аргументы, которые передаются в TextFileReader
(принимает delimiter
).
dtype_backend='numpy_nullable'
- (экспериментальный) внутренний тип данных, применяемый к результирующему DataFrame
.
Поведение выглядит следующим образом:
'numpy_nullable'
: возвращает фрейм с поддержкой null-dtype
(по умолчанию).'pyarrow'
: возвращает фрейм данных ArrowDtype
с нулевым значением, поддерживаемый pyarrow
.pandas.read_fwf()
:Функция pandas.read_fwf()
модуля pandas
читает таблицу форматированных строк фиксированной ширины в DataFrame
. Также поддерживает опциональную итерацию или разбиение файла на куски.
Функция pandas.read_fwf()
работает с файлами данных, которые имеют известную и фиксированную ширину столбцов. Параметры функции pandas.read_fwf()
во многом такие же, как и pandas.read_csv()
, с двумя дополнительными аргументами и другим использованием разделителя delimiter
:
colspecs
: список пар (кортежей), задающий размеры полей фиксированной ширины каждой строки в виде полуоткрытых интервалов (т. е. [from, to[
). Чтобы синтаксический анализатор pandas
попытался сам определить характеристики столбца из первых 100 строк данных, можно указать строковое значение 'infer'
. Поведение по умолчанию 'infer'
.widths
: список ширин полей, который можно использовать вместо colspecs
, если интервалы смежные.delimiter
(принимает TextFileReader()
): символы, которые следует рассматривать как символы-заполнители в файле со столбцами фиксированной ширины. Может использоваться для указания символа-заполнителя полей, если это не пробелы (например, '~'
). Рассмотрим типичный файл данных с ячейками фиксированной ширины:
data1 = ( "id8141 360.242940 149.910199 11950.7\n" "id1594 444.953632 166.985655 11788.4\n" "id1849 364.136849 183.628767 11806.2\n" "id1230 413.836124 184.375703 11916.8\n" "id1948 502.953953 173.237159 12468.3" ) # запишем данные в файл with open("bar.csv", "w") as f: f.write(data1)
Чтобы проанализировать этот файл в DataFrame
, необходимо просто передать спецификации столбца в функцию read_fwf()
вместе с именем файла:
# аргумент `colspecs` представляет собой список полуинтервалов >>> colspecs = [(0, 6), (8, 20), (21, 33), (34, 43)] >>> df = pd.read_fwf("bar.csv", colspecs=colspecs, header=None, index_col=0) >>> df # 1 2 3 # 0 # id8141 360.242940 149.910199 11950.7 # id1594 444.953632 166.985655 11788.4 # id1849 364.136849 183.628767 11806.2 # id1230 413.836124 184.375703 11916.8 # id1948 502.953953 173.237159 12468.3
Обратите внимание, как анализатор автоматически выбирает имена столбцов X.<column number>
, когда указан аргумент header = None
. В качестве альтернативы, можно указать только ширину для смежных столбцов:
# аргумент `widths` представляет собой список целых чисел. >>> widths = [6, 14, 13, 10] >>> df = pd.read_fwf("bar.csv", widths=widths, header=None) >>> df # 0 1 2 3 # 0 id8141 360.242940 149.910199 11950.7 # 1 id1594 444.953632 166.985655 11788.4 # 2 id1849 364.136849 183.628767 11806.2 # 3 id1230 413.836124 184.375703 11916.8 # 4 id1948 502.953953 173.237159 12468.3
Анализатор учтет дополнительные пробелы вокруг столбцов, поэтому в файле можно использовать дополнительное разделение между столбцами.
По умолчанию pandas.read_fwf()
попытается определить colspecs
файла, используя первые 100 строк. Pandas
делает это только в тех случаях, когда столбцы выровнены и правильно разделены разделителем delimiter
(разделителем по умолчанию является пробел).
>>> df = pd.read_fwf("bar.csv", header=None, index_col=0) >>> df # 1 2 3 # 0 # id8141 360.242940 149.910199 11950.7 # id1594 444.953632 166.985655 11788.4 # id1849 364.136849 183.628767 11806.2 # id1230 413.836124 184.375703 11916.8 # id1948 502.953953 173.237159 12468.3
Функция read_fwf()
поддерживает аргумент dtype
для указания типов анализируемых столбцов, которые должны отличаться от предполагаемого типа.
>>> pd.read_fwf("bar.csv", header=None, index_col=0).dtypes # 1 float64 # 2 float64 # 3 float64 # dtype: object >>> pd.read_fwf("bar.csv", header=None, dtype={2: "object"}).dtypes # 0 object # 1 float64 # 2 object # 3 float64 # dtype: object