Коротко
- Словарь
{"столбец": [значения]}— самый частый способ; списки должны быть одной длины. - Список словарей — по записи на строку; отсутствующие ключи становятся
NaN. - Из массива NumPy — с явными
columnsиindex. - Словарь из Series выравнивается по индексу: строки сопоставляются по меткам, а не по порядку.
shape— (строки, столбцы),columns— имена столбцов,index— метки строк,dtypes— типы столбцов.
Синтаксис
pd.DataFrame({"a": [1, 2], "b": [3, 4]})
pd.DataFrame([{"a": 1, "b": 3}, {"a": 2, "b": 4}])
pd.DataFrame(array, columns=["a", "b"], index=["x", "y"])
df.shape, df.columns, df.index, df.dtypesПараметры
ПараметрЧто делаетПо умолчанию
dataсловарь столбцов, список записей, массив, другой DataFrameобязательныйindexметки строкRangeIndex 0…n−1columnsимена столбцов (для массива) или какие столбцы взять и в каком порядкепо даннымdtypeодин тип для всех столбцовпо даннымПримеры
pd.DataFrame({
"product": ["чай", "кофе", "сок"],
"price": [120, 180, 95],
"in_stock": [True, False, True],
})Вывод
product price in_stock 0 чай 120 True 1 кофе 180 False 2 сок 95 True
rows = [
{"name": "Аня", "age": 21},
{"name": "Борис", "age": 19, "city": "Тула"}, # лишний ключ
]
pd.DataFrame(rows) # недостающие значения — NaNВывод
name age city 0 Аня 21 NaN 1 Борис 19 Тула
pd.DataFrame(np.arange(6).reshape(2, 3), columns=["a", "b", "c"], index=["x", "y"])Вывод
a b c x 0 1 2 y 3 4 5
pd.DataFrame({"price": [120, 180]}, index=["чай", "кофе"])Вывод
price чай 120 кофе 180
df = pd.DataFrame({"price": [120, 180], "qty": [3, 1]}, index=["чай", "кофе"])
print(df.shape)
print(df.columns)
print(df.index)
df.dtypesВывод
(2, 2) Index(['price', 'qty'], dtype='str') Index(['чай', 'кофе'], dtype='str') price int64 qty int64 dtype: object
Подводные камни
Списки разной длины
pd.DataFrame({"a": [1, 2, 3], "b": [1, 2]})Ошибка
ValueError: All arrays must be of the same length
Series сопоставляются по меткам
Если столбцы переданы как Series с разными индексами, результат содержит объединение меток, а недостающие значения — NaN. Это выравнивание по индексу.
price = pd.Series({"чай": 120, "кофе": 180})
stock = pd.Series({"кофе": 3, "чай": 10, "сок": 5})
pd.DataFrame({"price": price, "stock": stock}) # строки выравниваются по индексуВывод
price stock кофе 180.0 3 сок NaN 5 чай 120.0 10