Replace unhashable values in a DataFrame with their string repr
    Args:
        df: DataFrame
        columns: columns to replace, if necessary. Default None replaces all columns.

def _print_unhashable(df, columns=None):
    """
    Replace unhashable values in a DataFrame with their string repr
    Args:
        df: DataFrame
        columns: columns to replace, if necessary. Default None replaces all columns.
    """
    for c in df.columns if columns is None else columns:
        if df.dtypes[c] == object:
            try:
                df[c].apply(hash)
            except TypeError:
                df[c] = df[c].dropna().apply(pformat).ix[df.index]

    return df