CI, ENH: Check each minimum dependency is enforced in *.yaml and environment.yml
- [x] closes #50207 
- [x] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [x] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

@MarcoGorelli Could you please review my script? 

Also, do I need to add test cases for this script? If so, which file would I put the test cases in? I didn't see a place for CI test cases under pandas/tests/. Thanks @kathleenhang ! I'll review today

Regarding tests - there is `scripts/tests`, where some other CI-related scripts are tested (in general we're not too strict about testing these, though it would be better to have at least some little test) I think for this to pass the minimum versions will need to be added to the yaml files too e.g. `package>=min_version` thanks for sticking with this - looks like there's a few merge conflicts to resolve now (due to https://github.com/pandas-dev/pandas/pull/51175/files ?), if you resolve them and push then this might be close thanks for updating - I'm seeing these failures in CI, looks like there's a missing operator somewhere?

```diff
pre-commit hook(s) made changes.
If you are seeing this message in CI, reproduce locally with: `pre-commit run --all-files`.
To run `pre-commit` as part of git workflow, use `pre-commit install`.
All changes made by hooks:
diff --git a/ci/deps/actions-310.yaml b/ci/deps/actions-310.yaml
index b81c346..7d15e4c 100644
--- a/ci/deps/actions-310.yaml
+++ b/ci/deps/actions-310.yaml
@@ -50,7 +50,7 @@ dependencies:
   - scipy>=1.7.1
   - sqlalchemy<1.4.46, >=1.4.16
   - tabulate>=0.8.9
-  - tzdata>=2022a
+  - tzdata2022.1
   - xarray>=0.21.0
   - xlrd>=2.0.1
   - xlsxwriter>=1.4.3
diff --git a/ci/deps/actions-311.yaml b/ci/deps/actions-311.yaml
index f4b9cd0..e0a6836 100644
--- a/ci/deps/actions-311.yaml
+++ b/ci/deps/actions-311.yaml
@@ -50,7 +50,7 @@ dependencies:
   - scipy>=1.7.1
   - sqlalchemy<1.4.46, >=1.4.16
   - tabulate>=0.8.9
-  - tzdata>=2022a
+  - tzdata2022.1
   - xarray>=0.21.0
   - xlrd>=2.0.1
   - xlsxwriter>=1.4.3
diff --git a/ci/deps/actions-38-minimum_versions.yaml b/ci/deps/actions-38-minimum_versions.yaml
index 7652b63..706549d 100644
--- a/ci/deps/actions-38-minimum_versions.yaml
+++ b/ci/deps/actions-38-minimum_versions.yaml
@@ -53,7 +53,7 @@ dependencies:
   - scipy=1.7.1
   - sqlalchemy=1.4.16
   - tabulate=0.8.9
-  - tzdata=2022a
+  - tzdata=2022.1
   - xarray=0.21.0
   - xlrd=2.0.1
   - xlsxwriter=1.4.3
diff --git a/ci/deps/actions-39.yaml b/ci/deps/actions-39.yaml
index 3d1d2e5..8c6427d 100644
--- a/ci/deps/actions-39.yaml
+++ b/ci/deps/actions-39.yaml
@@ -50,7 +50,7 @@ dependencies:
   - scipy>=1.7.1
   - sqlalchemy<1.4.46, >=1.4.16
   - tabulate>=0.8.9
-  - tzdata>=2022a
+  - tzdata2022.1
   - xarray>=0.21.0
   - xlrd>=2.0.1
   - xlsxwriter>=1.4.3
diff --git a/ci/deps/actions-pypy-38.yaml b/ci/deps/actions-pypy-38.yaml
index 3218ec1..1fde1e7 100644
--- a/ci/deps/actions-pypy-38.yaml
+++ b/ci/deps/actions-pypy-38.yaml
@@ -14,7 +14,7 @@ dependencies:
   # test dependencies
   - pytest>=7.0.0
   - pytest-cov
-  - pytest-asyncio
+  - pytest-asyncio>=0.17.0
   - pytest-xdist>=2.2.0
   - hypothesis>=6.34.2
 
diff --git a/environment.yml b/environment.yml
index a15997b..99c0469 100644
--- a/environment.yml
+++ b/environment.yml
@@ -53,7 +53,7 @@ dependencies:
   - scipy>=1.7.1
   - sqlalchemy>=1.4.16
   - tabulate>=0.8.9
-  - tzdata>=2022a
+  - tzdata2022.1
   - xarray>=0.21.0
   - xlrd>=2.0.1
   - xlsxwriter>=1.4.3
``` wait does tzdata use `a-b-c-d-e-f-g` on [conda-forge](https://anaconda.org/conda-forge/tzdata/files), and `1-2-3-4-5-6-7` on [PyPI](https://pypi.org/project/tzdata/#history)? 🤦 🤦 🤦 never seen anything like this 😆 

 FWIW I don't think tzdata is managed by the same owners on pypi vs conda-forge Should be good, thanks! I've just made some minor fixups, and re-ran the script from having checked-out the `yaml` files to the upstream/main versions Nice, let's ship this

I can see a few places where there could still be some minor cleanups, e.g.
```diff
-            for yaml_version in yaml_versions:
-                old_dep += yaml_version + ", "
-            old_dep = old_dep[:-2]
+            old_dep = old_dep + ", ".join(yaml_versions)
```
and
```diff
-EXCLUSION_LIST = {
-    "python=3.8[build=*_pypy]": None,
-    "tzdata": None,
-    "pyarrow": None,
-}
+EXCLUSION_LIST = frozenset(["python=3.8[build=*_pypy]", "tzdata", "pyarrow"])
```
If you wanted to get these in in a follow-up PR, that'd be welcome - but for now, it's OK, let's merge this so we're a bit more protected against CI failures

Thanks @kathleenhang , fantastic effort here @MarcoGorelli Thanks, I appreciate your help! Nice additions, I'm picking up some nifty python tricks here.

I'll be sure to add those in a follow-up PR.