Bläddra i källkod

Fix for column data is a list or tuple in pc.data_table (#576)

Xiaojing Chen 2 år sedan
förälder
incheckning
a1f3bc7130
2 ändrade filer med 24 tillägg och 2 borttagningar
  1. 1 1
      pynecone/components/datadisplay/datatable.py
  2. 23 1
      pynecone/utils.py

+ 1 - 1
pynecone/components/datadisplay/datatable.py

@@ -94,7 +94,7 @@ class DataTable(Gridjs):
         # If given a pandas df break up the data and columns
         if utils.is_dataframe(type(self.data)):
             self.columns = Var.create(list(self.data.columns.values.tolist()))  # type: ignore
-            self.data = Var.create(list(self.data.values.tolist()))  # type: ignore
+            self.data = Var.create(utils.format_dataframe_values(self.data))  # type: ignore
 
         # Render the table.
         return super()._render()

+ 23 - 1
pynecone/utils.py

@@ -1288,6 +1288,28 @@ def is_valid_var_type(var: Type) -> bool:
     return _issubclass(var, StateVar) or is_dataframe(var) or is_figure(var)
 
 
+def format_dataframe_values(value: Type) -> List[Any]:
+    """Format dataframe values.
+
+    Args:
+        value: The value to format.
+
+    Returns:
+        Format data
+    """
+    if not is_dataframe(type(value)):
+        return value
+
+    format_data = []
+    for data in list(value.values.tolist()):
+        element = []
+        for d in data:
+            element.append(str(d) if isinstance(d, (list, tuple)) else d)
+        format_data.append(element)
+
+    return format_data
+
+
 def format_state(value: Any) -> Dict:
     """Recursively format values in the given state.
 
@@ -1316,7 +1338,7 @@ def format_state(value: Any) -> Dict:
     if is_dataframe(type(value)):
         return {
             "columns": value.columns.tolist(),
-            "data": value.values.tolist(),
+            "data": format_dataframe_values(value),
         }
 
     raise TypeError(