We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[DOC] Clarify original-dataframe mutation behavior in pyjanitor function docstrings
# Brief Description of Fix
Currently, some pyjanitor functions mutate the original dataframe and others return a copy. Solutions are heavily discussed in #79 but no conclusion has been reached. At the moment, it is unclear, without experimentation from the user, which behavior applies in each function. 

In the interim, I propose to explicitly clarify this behavior in each function's docstring so the user has a clear idea regarding the function's mutating behavior. Below is a sample of what this could look like for `.clean_names()`:

"""
Clean column names.
    Takes all column names, converts them to lowercase, then replaces all
    spaces with underscores. <b>Does not mutate original dataframe.</b>
"""

Happy to add this line somewhere else in the docstring if inappropriate here. 

- [Link to documentation page](https://pyjanitor.readthedocs.io/reference/index.html)
- [Link to exact file to be edited](https://github.com/ericmjl/pyjanitor/blob/dev/janitor/functions.py)


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `janitor/biology.py`
Content:
```
1 """
2 Biology and bioinformatics-oriented data cleaning functions.
3 """
4 
5 import pandas as pd
6 import pandas_flavor as pf
7 
8 from .utils import deprecated_alias, import_message
9 
10 try:
11     from Bio import SeqIO
12 except ImportError:
13     import_message(
14         "biology", "biopython", "conda install -c conda-forge biopython"
15     )
16 
17 
18 @pf.register_dataframe_method
19 @deprecated_alias(col_name="column_name")
20 def join_fasta(
21     df: pd.DataFrame, filename: str, id_col: str, column_name
22 ) -> pd.DataFrame:
23     """
24     Convenience method to join in a FASTA file as a column.
25 
26     This allows us to add the string sequence of a FASTA file as a new column
27     of data in the dataframe.
28 
29     This function only attaches the string representation of the SeqRecord.Seq
30     object from Biopython. Does not attach the full SeqRecord. Alphabet is
31     also not stored, under the assumption that the data scientist has domain
32     knowledge of what kind of sequence is being read in (nucleotide vs. amino
33     acid.)
34 
35     For more advanced functions, please use phylopandas.
36 
37     :param df: A pandas DataFrame.
38     :param filename: Path to the FASTA file.
39     :param id_col: The column in the DataFrame that houses sequence IDs.
40     :param column_name: The name of the new column.
41     """
42     seqrecords = {
43         x.id: x.seq.__str__() for x in SeqIO.parse(filename, "fasta")
44     }
45     seq_col = [seqrecords[i] for i in df[id_col]]
46     df[column_name] = seq_col
47     return df
48
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/janitor/biology.py b/janitor/biology.py
--- a/janitor/biology.py
+++ b/janitor/biology.py
@@ -26,12 +26,14 @@
     This allows us to add the string sequence of a FASTA file as a new column
     of data in the dataframe.
 
-    This function only attaches the string representation of the SeqRecord.Seq
+    This method only attaches the string representation of the SeqRecord.Seq
     object from Biopython. Does not attach the full SeqRecord. Alphabet is
     also not stored, under the assumption that the data scientist has domain
     knowledge of what kind of sequence is being read in (nucleotide vs. amino
     acid.)
 
+    This method mutates the original DataFrame.
+
     For more advanced functions, please use phylopandas.
 
     :param df: A pandas DataFrame.

{"golden_diff": "diff --git a/janitor/biology.py b/janitor/biology.py\n--- a/janitor/biology.py\n+++ b/janitor/biology.py\n@@ -26,12 +26,14 @@\n     This allows us to add the string sequence of a FASTA file as a new column\n     of data in the dataframe.\n \n-    This function only attaches the string representation of the SeqRecord.Seq\n+    This method only attaches the string representation of the SeqRecord.Seq\n     object from Biopython. Does not attach the full SeqRecord. Alphabet is\n     also not stored, under the assumption that the data scientist has domain\n     knowledge of what kind of sequence is being read in (nucleotide vs. amino\n     acid.)\n \n+    This method mutates the original DataFrame.\n+\n     For more advanced functions, please use phylopandas.\n \n     :param df: A pandas DataFrame.\n", "issue": "[DOC] Clarify original-dataframe mutation behavior in pyjanitor function docstrings\n# Brief Description of Fix\r\nCurrently, some pyjanitor functions mutate the original dataframe and others return a copy. Solutions are heavily discussed in #79 but no conclusion has been reached. At the moment, it is unclear, without experimentation from the user, which behavior applies in each function. \r\n\r\nIn the interim, I propose to explicitly clarify this behavior in each function's docstring so the user has a clear idea regarding the function's mutating behavior. Below is a sample of what this could look like for `.clean_names()`:\r\n\r\n\"\"\"\r\nClean column names.\r\n    Takes all column names, converts them to lowercase, then replaces all\r\n    spaces with underscores. <b>Does not mutate original dataframe.</b>\r\n\"\"\"\r\n\r\nHappy to add this line somewhere else in the docstring if inappropriate here. \r\n\r\n- [Link to documentation page](https://pyjanitor.readthedocs.io/reference/index.html)\r\n- [Link to exact file to be edited](https://github.com/ericmjl/pyjanitor/blob/dev/janitor/functions.py)\r\n\n", "before_files": [{"content": "\"\"\"\nBiology and bioinformatics-oriented data cleaning functions.\n\"\"\"\n\nimport pandas as pd\nimport pandas_flavor as pf\n\nfrom .utils import deprecated_alias, import_message\n\ntry:\n    from Bio import SeqIO\nexcept ImportError:\n    import_message(\n        \"biology\", \"biopython\", \"conda install -c conda-forge biopython\"\n    )\n\n\n@pf.register_dataframe_method\n@deprecated_alias(col_name=\"column_name\")\ndef join_fasta(\n    df: pd.DataFrame, filename: str, id_col: str, column_name\n) -> pd.DataFrame:\n    \"\"\"\n    Convenience method to join in a FASTA file as a column.\n\n    This allows us to add the string sequence of a FASTA file as a new column\n    of data in the dataframe.\n\n    This function only attaches the string representation of the SeqRecord.Seq\n    object from Biopython. Does not attach the full SeqRecord. Alphabet is\n    also not stored, under the assumption that the data scientist has domain\n    knowledge of what kind of sequence is being read in (nucleotide vs. amino\n    acid.)\n\n    For more advanced functions, please use phylopandas.\n\n    :param df: A pandas DataFrame.\n    :param filename: Path to the FASTA file.\n    :param id_col: The column in the DataFrame that houses sequence IDs.\n    :param column_name: The name of the new column.\n    \"\"\"\n    seqrecords = {\n        x.id: x.seq.__str__() for x in SeqIO.parse(filename, \"fasta\")\n    }\n    seq_col = [seqrecords[i] for i in df[id_col]]\n    df[column_name] = seq_col\n    return df\n", "path": "janitor/biology.py"}], "after_files": [{"content": "\"\"\"\nBiology and bioinformatics-oriented data cleaning functions.\n\"\"\"\n\nimport pandas as pd\nimport pandas_flavor as pf\n\nfrom .utils import deprecated_alias, import_message\n\ntry:\n    from Bio import SeqIO\nexcept ImportError:\n    import_message(\n        \"biology\", \"biopython\", \"conda install -c conda-forge biopython\"\n    )\n\n\n@pf.register_dataframe_method\n@deprecated_alias(col_name=\"column_name\")\ndef join_fasta(\n    df: pd.DataFrame, filename: str, id_col: str, column_name\n) -> pd.DataFrame:\n    \"\"\"\n    Convenience method to join in a FASTA file as a column.\n\n    This allows us to add the string sequence of a FASTA file as a new column\n    of data in the dataframe.\n\n    This method only attaches the string representation of the SeqRecord.Seq\n    object from Biopython. Does not attach the full SeqRecord. Alphabet is\n    also not stored, under the assumption that the data scientist has domain\n    knowledge of what kind of sequence is being read in (nucleotide vs. amino\n    acid.)\n\n    This method mutates the original DataFrame.\n\n    For more advanced functions, please use phylopandas.\n\n    :param df: A pandas DataFrame.\n    :param filename: Path to the FASTA file.\n    :param id_col: The column in the DataFrame that houses sequence IDs.\n    :param column_name: The name of the new column.\n    \"\"\"\n    seqrecords = {\n        x.id: x.seq.__str__() for x in SeqIO.parse(filename, \"fasta\")\n    }\n    seq_col = [seqrecords[i] for i in df[id_col]]\n    df[column_name] = seq_col\n    return df\n", "path": "janitor/biology.py"}]}