Skip to content

Commit a6832d4

Browse files
authored
[DOC] Switch from Sphinx to MkDocs (pyjanitor-devs#897)
This resolves pyjanitor-devs#894. The majority of votes from active maintainers is to move to mkdocs. The things done in this PR include: 1. Switching our docs build system from sphinx to mkdocs. 2. Refactoring functions.py and utils.py to play more nicely with automatic API docs. 3. Remove notebooks from the docs (temporarily) until we bring them back. 4. Mark tests as being turtle (slow), in preparation for splitting tests into two to make them run faster.
1 parent bc42073 commit a6832d4

File tree

128 files changed

+11924
-11641
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+11924
-11641
lines changed

.devcontainer/Dockerfile

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ RUN apt-get update \
2929
#
3030
# Install pylint
3131
&& /opt/conda/bin/pip install pylint \
32+
&& /opt/conda/bin/conda install mamba -c conda-forge \
3233
#
3334
# Update Python environment based on environment-dev.yml (if present)
34-
&& if [ -f "/tmp/conda-tmp/environment-dev.yml" ]; then /opt/conda/bin/conda env update -n base -f /tmp/conda-tmp/environment-dev.yml; fi \
35+
&& if [ -f "/tmp/conda-tmp/environment-dev.yml" ]; then /opt/conda/bin/mamba env update -n base -f /tmp/conda-tmp/environment-dev.yml; fi \
3536
&& rm -rf /tmp/conda-tmp \
3637
#
3738
# Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/non-root-user.

.devcontainer/devcontainer.json

+12-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22
// https://github.com/microsoft/vscode-dev-containers/tree/v0.117.1/containers/python-3-miniconda
33
{
44
"name": "pyjanitor dev container",
5-
"context": "..",
6-
"image": "registry.hub.docker.com/ericmjl/pyjanitor:devcontainer",
5+
// "context": "..",
6+
// "image": "registry.hub.docker.com/ericmjl/pyjanitor:devcontainer",
7+
"build": {
8+
"dockerfile": "Dockerfile",
9+
"context": ".."
10+
},
711
// Set *default* container specific settings.json values on container create.
812
"settings": {
913
"terminal.integrated.shell.linux": "/bin/bash",
@@ -16,12 +20,15 @@
1620
"extensions": [
1721
"ms-python.python",
1822
"ms-python.vscode-pylance",
19-
"ms-vsliveshare.vsliveshare-pack"
23+
"ms-vsliveshare.vsliveshare-pack",
24+
"arcticicestudio.nord-visual-studio-code"
2025
],
2126
// Use 'forwardPorts' to make a list of ports inside the container available locally.
22-
// "forwardPorts": [],
27+
"forwardPorts": [
28+
8000
29+
],
2330
// Use 'postCreateCommand' to run commands after the container is created.
24-
"postCreateCommand": "python setup.py develop"
31+
"postCreateCommand": "pre-commit install && python setup.py develop"
2532
// Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
2633
// "remoteUser": "vscode"
2734
}

.flake8

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[flake8]
2+
per-file-ignores =
3+
janitor/functions/__init__.py:F401
4+
janitor/accessors/__init__.py:F401

.github/workflows/codecov.yml

+1-3
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,7 @@ jobs:
3535

3636
- name: Build environment
3737
if: steps.cache-environment.outputs.cache-hit != 'true'
38-
run: |
39-
conda env create -f environment-dev.yml
40-
python -m pip install .
38+
run: bash ./scripts/ci/build_environment.sh
4139

4240
- name: Install conda-pack
4341
if: steps.cache-environment.outputs.cache-hit != 'true'

.github/workflows/docs-preview.yml

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
name: Build documentation preview
2+
3+
on:
4+
[pull_request]
5+
6+
jobs:
7+
build-environment:
8+
runs-on: ubuntu-18.04
9+
name: Build environment
10+
11+
steps:
12+
- name: Checkout repository
13+
uses: actions/checkout@v2
14+
15+
# See: https://github.com/marketplace/actions/setup-conda
16+
- name: Setup anaconda
17+
uses: s-weigand/setup-conda@v1
18+
with:
19+
conda-channels: "conda-forge"
20+
21+
- name: Cache conda environment
22+
id: cache-environment
23+
uses: actions/cache@v2
24+
# Conda environment build step depends on two files,
25+
# so we ensure that the hash key contains both their hashes.
26+
with:
27+
path: |
28+
pyjanitor-dev.tar.gz
29+
key: ${{ runner.os }}-env.${{ hashFiles('environment-dev.yml') }}
30+
31+
- name: Build environment
32+
if: steps.cache-environment.outputs.cache-hit != 'true'
33+
run: bash ./scripts/ci/build_environment.sh
34+
35+
- name: Install conda-pack
36+
if: steps.cache-environment.outputs.cache-hit != 'true'
37+
run: conda install -c conda-forge conda-pack
38+
39+
- name: Run conda-pack
40+
if: steps.cache-environment.outputs.cache-hit != 'true'
41+
run: conda pack -n pyjanitor-dev -o pyjanitor-dev.tar.gz
42+
43+
# See: https://github.com/actions/upload-artifact
44+
- name: Upload environment
45+
uses: actions/upload-artifact@v2
46+
with:
47+
name: pyjanitor-dev-tarball
48+
path: pyjanitor-dev.tar.gz
49+
50+
docs:
51+
name: Build static site docs
52+
runs-on: ubuntu-latest
53+
needs: build-environment
54+
55+
steps:
56+
- name: Checkout repository
57+
uses: actions/checkout@v2
58+
59+
# https://github.com/actions/download-artifact
60+
- name: Download environment tarball
61+
uses: actions/download-artifact@v2
62+
with:
63+
name: pyjanitor-dev-tarball
64+
65+
- name: Unpack environment and activate it
66+
run: |
67+
bash scripts/ci/unpack_environment.sh
68+
69+
- name: Build docs
70+
run: |
71+
source /tmp/pyjanitor-dev_env/bin/activate
72+
python -m ipykernel install --user --name pyjanitor-dev
73+
pip install -e .
74+
mkdocs build
75+
76+
- name: Deploy docs preview to Netlify
77+
uses: nwtgck/[email protected]
78+
with:
79+
publish-dir: "./site"
80+
production-deploy: false
81+
github-token: ${{ secrets.GHPAGES_TOKEN }}
82+
deploy-message: "Deploy from GitHub Actions"
83+
enable-pull-request-comment: true
84+
enable-commit-comment: false
85+
overwrites-pull-request-comment: true
86+
alias: deploy-preview-${{ github.event.number }}
87+
env:
88+
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
89+
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
90+
timeout-minutes: 1

.github/workflows/docs.yml

+3-6
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ on:
44
push:
55
branches:
66
- dev
7-
- ghactions-docs
87

98
jobs:
109
build-environment:
@@ -33,9 +32,7 @@ jobs:
3332

3433
- name: Build environment
3534
if: steps.cache-environment.outputs.cache-hit != 'true'
36-
run: |
37-
conda env create -f environment-dev.yml
38-
python -m pip install .
35+
run: bash ./scripts/ci/build_environment.sh
3936

4037
- name: Install conda-pack
4138
if: steps.cache-environment.outputs.cache-hit != 'true'
@@ -76,14 +73,14 @@ jobs:
7673
source /tmp/pyjanitor-dev_env/bin/activate
7774
python -m ipykernel install --user --name pyjanitor-dev
7875
pip install -e .
79-
make docs
76+
mkdocs build
8077
8178
- name: Deploy website
8279
uses: peaceiris/actions-gh-pages@v3
8380
with:
8481
# https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-set-personal-access-token-personal_token
8582
personal_token: ${{ secrets.GHPAGES_TOKEN }}
86-
publish_dir: ./docs/_build/html
83+
publish_dir: ./site/
8784
publish_branch: gh-pages
8885
# destination_dir: manuscript
8986
allow_empty_commit: false

.github/workflows/tests.yml

+3-5
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@ jobs:
3030

3131
- name: Build environment
3232
if: steps.cache-environment.outputs.cache-hit != 'true'
33-
run: |
34-
conda env create -f environment-dev.yml
35-
python -m pip install .
33+
run: bash ./scripts/ci/build_environment.sh
3634

3735
- name: Install conda-pack
3836
if: steps.cache-environment.outputs.cache-hit != 'true'
@@ -127,9 +125,9 @@ jobs:
127125
run: |
128126
source /tmp/pyjanitor-dev_env/bin/activate
129127
python -m pip install -e .
130-
cd docs && make html
128+
mkdocs build
131129
132130
- name: Netlify PR preview
133131
uses: netlify/actions/cli@master
134132
with:
135-
args: deploy --site ${{ secrets.NETLIFY_SITE_ID }} --auth ${{ secrets.NETLIFY_AUTH_TOKEN }} --dir=docs/_build/html/
133+
args: deploy --site ${{ secrets.NETLIFY_SITE_ID }} --auth ${{ secrets.NETLIFY_AUTH_TOKEN }} --dir=site/

AUTHORS.md

+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# Contributors
2+
3+
Once you have added your contribution to `pyjanitor`,
4+
please add your name using this markdown template:
5+
6+
```
7+
[@githubname](https://github.com/githubname) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3Agithubname)
8+
```
9+
10+
You can copy/paste the template and replace `githubname` with your username.
11+
12+
Contributions that did not leave a commit trace
13+
are indicated in bullet points below each user's username.
14+
15+
Leads
16+
-----
17+
18+
- [@ericmjl](https://github.com/ericmjl) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Aericmjl)
19+
- [@szuckerman](https://github.com/szuckerman) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Aszuckerman)
20+
- [@zbarry](https://github.com/zbarry) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Azbarry)
21+
- Co-led sprint at SciPy 2019.
22+
- [@hectormz](https://github.com/hectormz) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Ahectormz)
23+
- [@jk3587](https://github.com/jk3587) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Ajk3587)
24+
- Tagged issues at SciPy 2019.
25+
- [@sallyhong](https://github.com/sallyhong) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Asallyhong)
26+
- Tagged issues at SciPy 2019.
27+
- [@zjpoh](https://github.com/zjpoh) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Azjpoh)
28+
- Started pyspark sub-module.
29+
- [@anzelpwj](https://github.com/anzelpwj) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Aanzelpwj)
30+
- [@samukweku](https://github.com/samukweku) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Asamukweku)
31+
- [@loganthomas](https://github.com/loganthomas) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3Aloganthomas)
32+
- Helped others with `git` issues at SciPy 2019.
33+
- [@nvamsikrishna05](https://github.com/nvamsikrishna05) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3Anvamsikrishna05)
34+
35+
36+
Contributors
37+
------------
38+
39+
- [@JoshuaC3](https://github.com/JoshuaC3) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3AJoshuaC3)
40+
- [@cduvallet](https://github.com/cduvallet) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Acduvallet)
41+
- [@shantanuo](https://github.com/shantanuo) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Ashantanuo)
42+
- [@jcvall](https://github.com/jcvall) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Ajcvall)
43+
- [@CWen001](https://github.com/CWen001) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3ACWen001)
44+
- [@bhallaY](https://github.com/bhallaY) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3AbhallaY)
45+
- [@jekwatt](https://github.com/jekwatt) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Ajekwatt)
46+
- Helped other sprinters with `git` issues at SciPy 2019.
47+
- [@kurtispinkney](https://github.com/kurtispinkney) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Akurtispinkney)
48+
- [@lphk92](https://github.com/lphk92) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Alphk92)
49+
- [@jonnybazookatone](https://github.com/jonnybazookatone) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Ajonnybazookatone)
50+
- [@SorenFrohlich](https://github.com/SorenFrohlich) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3ASorenFrohlich)
51+
- [@dave-frazzetto](https://github.com/dave-frazzetto) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Adave-frazzetto)
52+
- [@dsouzadaniel](https://github.com/dsouzadaniel) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Adsouzadaniel)
53+
- [@Eidhagen](https://github.com/Eidhagen) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3AEidhagen)
54+
- [@mdini](https://github.com/mdini) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Amdini)
55+
- [@kimt33](https://github.com/kimt33) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Akimt33)
56+
- @jack-kessler-88 | user no longer found
57+
- [@NapsterInBlue](https://github.com/NapsterInBlue) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3ANapsterInBlue)
58+
- [@ricky-lim](https://github.com/ricky-lim) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Aricky-lim)
59+
- [@catherinedevlin](https://github.com/catherinedevlin) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Acatherinedevlin)
60+
- [@StephenSchroed](https://github.com/StephenSchroeder) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3AStephenSchroeder)
61+
- [@Rajat-181](https://github.com/Rajat-181) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3ARajat-181)
62+
- [@dendrondal](https://github.com/dendrondal) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Adendrondal)
63+
- [@rahosbach](https://github.com/rahosbach) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Arahosbach)
64+
- [@asearfos](https://github.com/asearfos) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Aasearfos)
65+
- [@emnemnemnem](https://github.com/emnemnemnem) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Aemnemnemnem)
66+
- [@rebeccawperry](https://github.com/rebeccawperry) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Arebeccawperry)
67+
- [@TomMonks](https://github.com/TomMonks) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Atommonks)
68+
- [@benjaminjack](https://github.com/benjaminjack) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Abenjaminjack)
69+
- [@kulini](https://github.com/kulini) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Akulini)
70+
- [@dwgoltra](https://github.com/dwgoltra) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Adwgoltra)
71+
- [@shandou](https://github.com/shandou) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Ashandou)
72+
- [@samwalkow](https://github.com/samwalkow) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Asamwalkow)
73+
- [@portc13](https://github.com/portc13) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Aportc13)
74+
- [@DSNortsev](https://github.com/DSNortsev) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3ADSNortsev)
75+
- [@qtson](https://github.com/qtson) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Aqtson)
76+
- [@keoghdata](https://github.com/keoghdata) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Akeoghdata)
77+
- [@cjmayers](https://github.com/cjmayers) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Acjmayers)
78+
- [@gjlynx](https://github.com/gjlynx) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Agjlynx)
79+
- [@aopisco](https://github.com/aopisco) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Aaopisco)
80+
- [@gaworecki5](https://github.com/gaworecki5) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Agaworecki5)
81+
- [@puruckertom](https://github.com/puruckertom) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Apuruckertom)
82+
- [@thomasjpfan](https://github.com/thomasjpfan) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Athomasjpfan)
83+
- [@jiafengkevinchen](https://github.com/jiafengkevinchen) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Ajiafengkevinchen)
84+
- [@mralbu](https://github.com/mralbu) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Amralbu)
85+
- [@Ram-N](https://github.com/Ram-N) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3ARam-N)
86+
- [@eyaltrabelsi](https://github.com/eyaltrabelsi) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Aeyaltrabelsi)
87+
- [@gddcunh](https://github.com/gddcunh) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Agddcunh)
88+
- [@DollofCuty](https://github.com/DollofCuty) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3ADollofCuty)
89+
- [@bdice](https://github.com/bdice) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Abdice)
90+
- [@evan-anderson](https://github.com/evan-anderson) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3Aevan-anderson)
91+
- [@smu095](https://github.com/smu095) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3smu095)
92+
- [@VPerrollaz](https://github.com/VPerrollaz) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3AVPerrollaz)
93+
- [@UGuntupalli](https://github.com/UGuntupalli) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3AUGuntupalli)
94+
- [@mphirke](https://github.com/mphirke) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3Amphirke)
95+
- [@sauln](https://github.com/sauln) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3Asauln)
96+
- [@richardqiu](https://github.com/richardqiu) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3Arichardqiu)
97+
- [@MinchinWeb](https://github.com/MinchinWeb) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3AMinchinWeb)
98+
- [@BaritoneBeard](https://github.com/BaritoneBeard) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3ABaritoneBeard)
99+
- [@Sousa8697](https://github.com/Sousa8697) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3ASousa8697)
100+
- [@MollyCroke](https://github.com/MollyCroke) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3AMollyCroke)
101+
- [@ericclessantostv](https://github.com/ericlessantostv) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3Aericclessantostv)
102+
- [@fireddd](https://github.com/fireddd) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/issues?q=is%3Aclosed+mentions%3Afireddd)
103+
- [@Zeroto521](https://github.com/Zeroto521) | [contributions](https://github.com/pyjanitor-devs/pyjanitor/pulls?utf8=%E2%9C%93&q=is%3Aclosed+mentions%3Zeroto521)

0 commit comments

Comments
 (0)