  Data preparation is a trial-and-error process that typically involves
countless iterations over the data to define the best pipeline of operators for
a given task. With tabular data, practitioners often perform that burdensome
activity on local machines by writing ad hoc scripts with libraries based on
the Pandas dataframe API and testing them on samples of the entire dataset--the
faster the library, the less idle time its users have. In this paper, we
evaluate the most popular Python dataframe libraries in general data
preparation use cases to assess how they perform on a single machine. To do so,
we employ 4 real-world datasets and pipelines with distinct characteristics,
covering a variety of scenarios. The insights gained with this experimentation
are useful to data scientists who need to choose which of the dataframe
libraries best suits their data preparation task at hand. In a nutshell, we
found that: for small datasets, Pandas consistently proves to be the best
choice with the richest API; when RAM is limited and there is no need to
complete compatibility with Pandas API, Polars is the go-to choice thanks to
its resource and query optimization; when a GPU is available, CuDF often yields
the best performance, while for very large datasets that cannot fit in the GPU
memory and RAM, PySpark (thanks to a multi-thread execution and a query
optimizer) and Vaex (exploiting a columnar data format) are the best options.
