### Apache Airflow Provider(s)

amazon

### Versions of Apache Airflow Providers

_No response_

### Apache Airflow version

latest

### Operating System

any

### Deployment

Other

### Deployment details

_No response_

### What happened

First of all, apologies if this is not the right section to post a GH issue. I looked for provider specific feature requests but couldnt find such section.

We use the aws provider at my company to interact from airflow with AWS services. We are using poetry for building the testing environment to test our dags.

However the build times are quite long, and the reason is building pandas, which is a [dependency ](https://github.com/apache/airflow/blob/main/airflow/providers/amazon/provider.yaml#L62) of the amazon provider.

By checking the provider's code, it seems pandas is used in a small minority of functions inside the provider:
```
./aws/transfers/hive_to_dynamodb.py:93:        data = hive.get_pandas_df(self.sql, schema=self.schema)
```
and
```
./aws/transfers/sql_to_s3.py:159:        data_df = sql_hook.get_pandas_df(sql=self.query, parameters=self.parameters)
```

Forcing every AWS Airflow user that do not use hive or want to turn sql into an s3 file to install pandas is a bit cumbersome.

### What you think should happen instead

given how heavy the package is and how little is used in the amazon provider, pandas should be an optional dependency.

### How to reproduce

_No response_

### Anything else

_No response_

### Are you willing to submit PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

part_specs: list[Any], partition_key: str | None, filter_map: dict[str, Any] | None
    ) -> Any:
        """
        Helper method to get max partition of partitions with partition_key
        from part specs. key:value pair in filter_map will be used to
        filter out partitions.
        :param part_specs: list of partition specs.
        :param partition_key: partition key name.
        :param filter_map: partition_key:partition_value map used for partition filtering,
                           e.g. {'key1': 'value1', 'key2': 'value2'}.
                           Only partitions matching all partition_key:partition_value
                           pairs will be considered as candidates of max partition.
        :return: Max partition or None if part_specs is empty.
        """
        if not part_specs:
            return None
        
        if partition_key not in part_specs[0].keys():
            raise AirflowException(f"Provided partition_key {partition_key} is not in part_specs.")
        is_subset = None
        if filter_map:
            is_subset = set(filter_map.keys()).issubset(set(part_specs[0].keys()))
        if filter_map and not is_subset:
            raise AirflowException(
                f"Keys in provided filter_map {', '.join(filter_map.keys())} "
                f"are not subset of part_spec keys: {', '.join(part_specs[0].keys())}"
            )
        candidates = [
            p_dict[partition_key]
            for p_dict in part_specs