In this tutorial, we'll take a closer look at the Pandas error, TypeError: DataFrame.pivot() takes 1 positional argument but 4 were given - Pandas. First, we'll create an example of how to produce it. Next, we'll explain the leading cause of the exception. And finally, we'll see how to fix it.

Example

Let's have a DataFrame like:

import pandas as pd
df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'],
               	'bar': ['A', 'B', 'B', 'A', 'B', 'C'],
               	'baz': [1, 2, 3, 4, 5, 6],
               	'zoo': ['x', 'y', 'z', 'q', 'w', 't']})

with data:

foo bar baz zoo
0 one A 1 x
1 one B 2 y
2 one B 3 z
3 two A 4 q
4 two B 5 w

When running a code like the one below:

df.pivot('foo', 'bar', 'baz')

we get error message: TypeError: DataFrame.pivot() takes 1 positional argument but 4 were given

TypeError: DataFrame.pivot() takes 1 positional argument but 4 were given - Pandas

Cause

The reason for the error is that:

all arguments of DataFrame.pivot are keyword-only.

Which means that we need to provide argument names for each argument passed to this method.

You can read more on this link: ENH: Keep positional arguments for pivot #51359

The code above was working in the past. Pandas community is doing efforts to make Pandas code more:

  • readable
  • explicit

Solution

To solve error - TypeError: DataFrame.pivot() takes 1 positional argument but 4 were given - we need to provide all arguments by name:

df.pivot_table(index='foo', columns='bar', values='baz')

This code will work fine.

Conclusion

We've explained Pandas's TypeError: DataFrame.pivot() takes 1 positional argument but 4 were given error. Then, we discussed the reason and shared a discussion on the topic. Lastly, we discussed how to resolve the error.