NOTE: THIS PROJECT IS STILL RATHER FRESH. TRY OUT WITH CARE AND GIVE FEEDBACK!
Anki is one of the most popular flashcard system for spaced repetition learning, pandas is the most popular python package for data analysis and manipulation. So what could be better than to bring both together?
AnkiPandas you can use
pandas to easily analyze or manipulate your
- Select: Easily select arbitrary subsets of your cards, notes or reviews using
pandas(one of many introductions, official documentation)
- Visualize: Use pandas’ powerful built in tools or switch to the even more versatile seaborn (statistical analysis) or matplotlib libraries
- Manipulate: Apply fast bulk operations to the table (e.g. add tags, change decks, set field contents, suspend cards, …) or iterate over the table and perform these manipulations step by step
- Add: Add new notes and cards
- Import and Export: Pandas can export to (and import from) csv, MS Excel, HTML, JSON, … (io documentation)
- Easy installation: Install via python package manager (independent of your Anki installation)
- Simple: Just one line of code to get started
- Convenient: Bring together information about cards, notes, models, decks and more in just one table!
- Fully documented: Documentation on readthedocs
- Well tested: More than 100 unit tests to keep everything in check
Alternatives: If your main goal is to add new cards, models and more, you can also take a look at the genanki project.
pip3 install --user --upgrade ankipandas
For the latest development version you can also work from a cloned version of this repository:
git clone https://github.com/klieret/ankipandas/ cd ankipandas pip3 install --user --upgrade .
Starting up is as easy as this:
from ankipandas import Collection col = Collection()
col.notes will be dataframe containing all notes, with additional
methods that make many things easy.
Similarly, you can access cards or reviews using
If called without any argument
Collection() tries to find
your Anki database by itself. However this might take some time.
To make it easier, simply supply (part of) the path to the database and
(if you have more than one user) your Anki user name, e.g.
Collection(".local/share/Anki2/", user="User 1") on many Linux
To get information about the interpretation of each column, use
Take a look at the documentation to find out more about more about the available methods!
Some basic examples:
** More examples can be found in the analysis documentation **
Show a histogram of the number of reviews (repetitions) of each card for all decks:
Show the number of leeches per deck as pie chart:
cards = col.cards.merge_notes() selection = cards[cards.has_tag("leech")] selection["cdeck"].value_counts().plot.pie()
Find all notes of model
MnemoticModel with empty
notes = col.notes.fields_as_columns() notes.query("model=='MnemoticModel' and 'Mnemotic'==''")
marked tag to all notes that contain the tags
selection = col.notes.has_tags(["Japanese", "leech"]) selection = selection.add_tag(["difficult-japanese", "marked"]) col.notes.update(selection) col.write(modify=True) # Overwrites your database after creating a backup!
language field to
English for all notes of model
LanguageModel that are tagged with
selection = col.notes.has_tag(["English"]).query("model=='LanguageModel'").copy() fields_as_columns(inplace=True) selection["language"] = "English" col.notes.update(selection) col.write(modify=True)
Move all cards tagged
leech to the deck
selection = col.cards.has_tag("leech") selection["cdeck"] = "Leeches Only" col.cards.update(selection) col.write(modify=True)
Your help is greatly appreciated! Suggestions, bug reports and feature requests are best opened as github issues. You could also first discuss in the gitter community. If you want to code something yourself, you are very welcome to submit a pull request!
License & Disclaimer¶
This software is licenced under the MIT license and (despite best testing efforts) comes without any warranty. The logo is inspired by the Anki logo (license) and the logo of the pandas package (license2). This library and its author(s) are not affiliated/associated with the main Anki or pandas project in any way.