TypeError: unhashable type: 'dict' when using apply/transform?
See original GitHub issueHello!
I am quite puzzled by some inconsistencies when using apply
. Consider this simple example
idx=[pd.to_datetime('2012-02-01 14:00:00') ,
pd.to_datetime('2012-02-01 14:01:00'),
pd.to_datetime('2012-03-05 14:04:00'),
pd.to_datetime('2012-03-05 14:01:00'),
pd.to_datetime('2012-03-10 14:02:00'),
pd.to_datetime('2012-03-11 14:07:50')
]
test=pd.DataFrame({'value1':[1,2,3,4,5,6],
'value2':[10,20,30,40,50,60],
'groups' : ['A','A','A','B','B','B']},
index=idx)
test
Out[22]:
groups value1 value2
2012-02-01 14:00:00 A 1 10
2012-02-01 14:01:00 A 2 20
2012-03-05 14:04:00 A 3 30
2012-03-05 14:01:00 B 4 40
2012-03-10 14:02:00 B 5 50
2012-03-11 14:07:50 B 6 60
Now, this WORKS
test.groupby('groups').apply(lambda x: x.resample('1 T', label='left', closed='left').apply(
{'value1' : 'mean',
'value2' : 'mean'}))
but this FAILS
test.groupby('groups').apply(
{'value1' : 'mean',
'value2' : 'mean'})
Traceback (most recent call last):
File "<ipython-input-24-741304ecf105>", line 3, in <module>
'value2' : 'mean'})
File "C:\Users\\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\core\groupby.py", line 696, in apply
func = self._is_builtin_func(func)
File "C:\Users\\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\core\base.py", line 730, in _is_builtin_func
return self._builtin_table.get(arg, arg)
TypeError: unhashable type: 'dict'
This worked in prior versions of Pandas. What is the new syntax then? Some very useful variant of the code above I used to use was:
test.groupby('groups').apply(
{'newname1' : {'value1' : 'mean'},
'newname2' : {'value2' : 'mean'}})
to rename the new variables on the fly. Is this still possible now? Is this a bug?
Many thanks!
Issue Analytics
- State:
- Created 6 years ago
- Reactions:2
- Comments:29 (11 by maintainers)
Top Results From Across the Web
Pandas TypeError: unhashable type: 'list'/'dict' - Softhints
TypeError : unhashable type: 'dict' when using apply/transform? groupby fails when elements are lists. Step #2: How to detect if column contains list...
Read more >TypeError: unhashable type: 'dict' - python - Stack Overflow
You're trying to use a dict as a key to another dict or in a set . That does not work because the...
Read more >TypeError unhashable type 'dict' - STechies
The solution to this problem is to convert the dictionary into something that is hashable.
Read more >TypeError: unhashable type: 'dict' - Discussions on Python.org
I was unaware of having to define dictionaries prior to the call before using them in source code. I will try that too....
Read more >Python TypeError: unhashable type: 'dict' Solution
In a Python dictionary, all keys must be hashable. If you try to use an unhashable key type when adding a key to...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
@WillAyd Just so I’m clear, you’re suggesting something like:
test.groupby('groups').transform({'value1': [np.mean, max], 'value2': max})
which should return something like:Is there any reason the documentation says that transform takes a dictionary, when it doesn’t?