-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Lists inside of DataFrames are unhashable and break st.cache #111
Copy link
Copy link
Closed
Labels
type:bugSomething isn't working as expectedSomething isn't working as expected
Description
Summary
A DataFrame which contains a list is unhashable and therefore breaks st.cache.
Steps to reproduce
Run this code
import streamlit as st
import pandas as pd
@st.cache
def return_a_list(n):
return pd.DataFrame({'n': [n], 'result': [list(range(n))]})
st.text(return_a_list(10))Behavior
Actual behavior
We get an error with the following stack trace
TypeError: unhashable type: 'list'
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/streamlit/ScriptRunner.py", line 317, in _run_script exec(code, module.__dict__)
File "/Users/adrien/Desktop/streamlit/streamlit-staging/test_list_bug.py", line 9, in <module> st.text(return_a_list(10))
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/streamlit/caching.py", line 412, in wrapped_func key, return_value, persist, ignore_hash, args_mutated)
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/streamlit/caching.py", line 307, in _write_to_cache _write_to_mem_cache(key, value, ignore_hash, args_mutated)
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/streamlit/caching.py", line 237, in _write_to_mem_cache hash=None if ignore_hash else get_hash(value),
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/streamlit/hashing.py", line 89, in get_hash hasher.update(f, context)
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/streamlit/hashing.py", line 159, in update self._update(self.hasher, obj, context)
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/streamlit/hashing.py", line 190, in _update b = self.to_bytes(obj, context)
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/streamlit/hashing.py", line 179, in to_bytes b = self._to_bytes(obj, context)
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/streamlit/hashing.py", line 230, in _to_bytes return pd.util.hash_pandas_object(obj).sum()
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/pandas/core/util/hashing.py", line 115, in hash_pandas_object h = _combine_hash_arrays(hashes, num_items)
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/pandas/core/util/hashing.py", line 41, in _combine_hash_arrays for i, a in enumerate(arrays):
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/pandas/core/util/hashing.py", line 104, in <genexpr> hashes = (hash_array(series.values) for _, series in obj.iteritems())
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/pandas/core/util/hashing.py", line 286, in hash_array codes, categories = factorize(vals, sort=False)
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/pandas/util/_decorators.py", line 178, in wrapper return func(*args, **kwargs)
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/pandas/core/algorithms.py", line 630, in factorize na_value=na_value)
File "/Users/adrien/.pyenv/versions/3.6.3/envs/streamlit-staging/lib/python3.6/site-packages/pandas/core/algorithms.py", line 476, in _factorize_array na_value=na_value)
File "pandas/_libs/hashtable_class_helper.pxi", line 1601, in pandas._libs.hashtable.PyObjectHashTable.get_labels
Expected behavior
This should work, just as if return_a_list weren't decorated with @st.cache.
Is this a regression?
Not sure.
Debug info
$ streamlit version && python --version && pyenv --version && sw_vers && "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --version
Streamlit, version 0.45.0
Python 3.6.3
pyenv 1.2.3
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G95
Google Chrome 76.0.3809.132
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
type:bugSomething isn't working as expectedSomething isn't working as expected