# Adjust schema

> For the complete documentation index, see [llms.txt](https://kotlin.github.io/dataframe/llms.txt).

The [DataFrame](dataframe.html) interface has type argument `T` that doesn't affect the contents of [DataFrame](dataframe.html), but marks [DataFrame](dataframe.html) with a type that represents the data schema that this [DataFrame](dataframe.html) is supposed to have. This argument is used to generate [extension properties](extensionpropertiesapi.html) for typed data access.

API reference: [cast](https://kotlin.github.io/dataframe/api-docs/core/org.jetbrains.kotlinx.dataframe.api/cast.html), [convertTo](https://kotlin.github.io/dataframe/api-docs/core/org.jetbrains.kotlinx.dataframe.api/convert-to.html)

Another place where this argument has a special role is in [interop with data classes](collectionsinterop.html#interop-with-data-classes):

* `List<T>` -> `DataFrame<T>`: [toDataFrame](createdataframe.html#todataframe)

* `DataFrame<T>` -> `List<T>`: [toList](tolist.html)

Actual data in [DataFrame](dataframe.html) may diverge from compile-time schema marker `T` due to dynamic nature of data inside [DataFrame](dataframe.html). However, at some points of code you may know exactly what [DataFrame](dataframe.html) schema is expected. To match your knowledge with expected real-time [DataFrame](dataframe.html) contents you can use one of two functions:

* [cast](cast.html) — change type argument of [DataFrame](dataframe.html) to the expected schema without changing data in [DataFrame](dataframe.html).

* [convertTo](convertto.html) — convert [DataFrame](dataframe.html) contents to match the expected schema.

Alternatively, use [requireColumn](require.html) to incrementally add type information to compile time schema.

