diff --git a/python/pyarrow/pandas_compat.py b/python/pyarrow/pandas_compat.py index c288c7f03a8..743dc0bb62a 100644 --- a/python/pyarrow/pandas_compat.py +++ b/python/pyarrow/pandas_compat.py @@ -365,7 +365,11 @@ def dataframe_to_arrays(df, schema, preserve_index, nthreads=1, columns=None): nthreads = 1 def convert_column(col, ty): - return pa.array(col, from_pandas=True, type=ty) + try: + return pa.array(col, from_pandas=True, type=ty) + except (pa.ArrowInvalid, pa.ArrowTypeError) as e: + e.args += ("Conversion failed for column %s" % col.name,) + raise e if nthreads == 1: arrays = [convert_column(c, t) diff --git a/python/pyarrow/tests/test_convert_pandas.py b/python/pyarrow/tests/test_convert_pandas.py index bdb84c7d6ba..43f46b5cf05 100644 --- a/python/pyarrow/tests/test_convert_pandas.py +++ b/python/pyarrow/tests/test_convert_pandas.py @@ -1879,6 +1879,11 @@ def test_mixed_types_fails(self): with pytest.raises(pa.ArrowTypeError): pa.Table.from_pandas(data) + data = pd.DataFrame({'a': ['a', 1, 2.0]}) + expected_msg = 'Conversion failed for column a' + with pytest.raises(pa.ArrowTypeError, match=expected_msg): + pa.Table.from_pandas(data) + def test_strided_data_import(self): cases = []