Search code examples
trackpy

Why does Trackpy give me an error when I try to compute the overall drift speed?


I'm going through the Trackpy walkthrough (http://soft-matter.github.io/trackpy/v0.3.0/tutorial/walkthrough.html) but using my own pictures. When I get to calculating the overall drift velocity, I get this error and I don't know what it means:drift error

I don't have a ton of coding experience so I'm not even sure how to look at the source code to figure out what's happening.


Solution

  • Your screenshot shows the traceback of the error, i.e. you called a function, tp.compute_drift(), but this function called another function, pandas_sort(), which called another function, etc until raise ValueError(msg) is called, which interrupts the chain. The last line is the actual error message:

    ValueError: 'frame' is both an index level and a column label, which is ambiguous.
    

    To understand it, you have to know that Trackpy stores data in DataFrame objects from the pandas library. The tracking data you want to extract drift motion from is stored in such an object, t2. If you print t2 it will probably look like this:

                     y            x      mass  ...        ep  frame  particle
    frame                                      ...                           
    0        46.695711  3043.562648  3.881068  ...  0.007859      0         0
    3979   3041.628299  1460.402493  1.787834  ...  0.037744      0         1
    3978   3041.344043  4041.002275  4.609833  ...  0.010825      0         2
    

    The word "frame" is the title of two columns, which confuses the sorting algorithm. As the error message says, it is ambiguous to sort the table by frame.

    Solution

    The index (leftmost) column does not need a name here, so remove it with

    t2.index.name = None
    

    and try again. Check if you have the newest Trackpy and Pandas versions.