def to_dataframe()

in azure/Kqlmagic/kql_proxy.py [0:0]


    def to_dataframe(self, raise_errors=True, options=None):
        """Returns Pandas data frame."""
        
        options = options or {}
        pandas = Dependencies.get_module("pandas")

        if self.data_table.columns_count == 0 or self.data_table.rows_count == 0:
            # return pandas.DataFrame()
            pass

        frame = pandas.DataFrame(self.data_table.rows, columns=self.data_table.columns_name)

        for (idx, col_name) in enumerate(self.data_table.columns_name):
            col_type = self.data_table.columns_type[idx].lower()

            if col_type == "timespan":
                frame[col_name] = pandas.to_timedelta(
                    frame[col_name].apply(lambda t: t.replace(".", " days ") if type(t) is str and "." in t.split(":")[0] else t)
                )

            elif col_type == "datetime":
                frame[col_name] = pandas.to_datetime(
                    frame[col_name].apply(lambda d: d if self._is_valid_datetime(d) else None)
                )

            elif col_type == "string":
                # frame[col_name] = frame[col_name].apply(lambda x: json_dumps(x) if type(x) == str else x)
                pass

            elif col_type == "dynamic":
                if options.get("dynamic_to_dataframe") == "str":
                    frame[col_name] = frame[col_name].apply(lambda x: self._dynamic_to_str(x))
                else:
                    frame[col_name] = frame[col_name].apply(lambda x: self._dynamic_to_object(x))

            elif col_type in self.KQL_TO_DATAFRAME_DATA_TYPES:
                pandas_type = self.KQL_TO_DATAFRAME_DATA_TYPES[col_type]
                # NA type promotion
                if pandas_type == "int64" or pandas_type == "int32":
                    for i in range(0, len(frame[col_name])):
                        if frame[col_name][i] is None or str(frame[col_name][i]) == "nan":
                            pandas_type = "float64"
                            break
                elif pandas_type == "bool":
                    for i in range(0, len(frame[col_name])):
                        if frame[col_name][i] is None or str(frame[col_name][i]) == "nan":
                            pandas_type = "object"
                            break
                frame[col_name] = frame[col_name].astype(pandas_type, errors="raise" if raise_errors else "ignore")
        return frame