[ 
https://issues.apache.org/jira/browse/ARROW-5139?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16833597#comment-16833597
 ] 

Joris Van den Bossche edited comment on ARROW-5139 at 5/6/19 9:37 AM:
----------------------------------------------------------------------

[~fjetter] thanks for the report! A little bit simpler reproducible example, 
without parquet (but the same underlying reason, the rangeindex is indeed not 
constructed again for empty tables):

{code}
In [1]: import pyarrow as pa

In [2]: pa.__version__  
Out[2]: '0.12.0'

In [3]: df = pd.DataFrame( 
   ...:     {"a": [1, 2]} 
   ...: ) 

In [4]: table = pa.Table.from_pandas(df, columns=[], preserve_index=True)     

In [5]: table
Out[5]: 
pyarrow.Table
__index_level_0__: int64
metadata
--------
OrderedDict([(b'pandas',
              b'{"index_columns": ["__index_level_0__"], "column_indexes": ['
              b'{"name": null, "field_name": null, "pandas_type": "unicode",'
              b' "numpy_type": "object", "metadata": {"encoding": "UTF-8"}}]'
              b', "columns": [{"name": null, "field_name": "__index_level_0_'
              b'_", "pandas_type": "int64", "numpy_type": "int64", "metadata'
              b'": null}], "pandas_version": "0.23.4"}')])

In [6]: print(table.to_pandas())
Empty DataFrame
Columns: []
Index: [0, 1]

In [7]: table.to_pandas().index
Out[7]: Int64Index([0, 1], dtype='int64')
{code}
 
But the above, now gives:

{code}
In [4]: table 
Out[4]: 
pyarrow.Table

metadata
--------
{b'pandas': b'{"index_columns": [{"kind": "range", "name": null, "start": 0, "'
            b'stop": 2, "step": 1}], "column_indexes": [{"name": null, "field_'
            b'name": null, "pandas_type": "unicode", "numpy_type": "object", "'
            b'metadata": {"encoding": "UTF-8"}}], "columns": [], "creator": {"'
            b'library": "pyarrow", "version": "0.13.1.dev126+ga9ae4a9f.d201905'
            b'03"}, "pandas_version": "0.24.2"}'}

In [5]: print(table.to_pandas())   
Empty DataFrame
Columns: []
Index: []

In [6]: table.to_pandas().index    
Out[6]: RangeIndex(start=0, stop=0, step=1)
{code}
 


was (Author: jorisvandenbossche):
[~fjetter] thanks for the report! A little bit easier reproducible example, 
without parquet (but the same underlying reason, the rangeindex is indeed not 
constructed again for empty tables):

{code}
In [1]: import pyarrow as pa

In [2]: pa.__version__  
Out[2]: '0.12.0'

In [3]: df = pd.DataFrame( 
   ...:     {"a": [1, 2]} 
   ...: ) 

In [4]: table = pa.Table.from_pandas(df, columns=[], preserve_index=True)     

In [5]: table
Out[5]: 
pyarrow.Table
__index_level_0__: int64
metadata
--------
OrderedDict([(b'pandas',
              b'{"index_columns": ["__index_level_0__"], "column_indexes": ['
              b'{"name": null, "field_name": null, "pandas_type": "unicode",'
              b' "numpy_type": "object", "metadata": {"encoding": "UTF-8"}}]'
              b', "columns": [{"name": null, "field_name": "__index_level_0_'
              b'_", "pandas_type": "int64", "numpy_type": "int64", "metadata'
              b'": null}], "pandas_version": "0.23.4"}')])

In [6]: print(table.to_pandas())
Empty DataFrame
Columns: []
Index: [0, 1]

In [7]: table.to_pandas().index
Out[7]: Int64Index([0, 1], dtype='int64')
{code}
 
But the above, now gives:

{code}
In [4]: table 
Out[4]: 
pyarrow.Table

metadata
--------
{b'pandas': b'{"index_columns": [{"kind": "range", "name": null, "start": 0, "'
            b'stop": 2, "step": 1}], "column_indexes": [{"name": null, "field_'
            b'name": null, "pandas_type": "unicode", "numpy_type": "object", "'
            b'metadata": {"encoding": "UTF-8"}}], "columns": [], "creator": {"'
            b'library": "pyarrow", "version": "0.13.1.dev126+ga9ae4a9f.d201905'
            b'03"}, "pandas_version": "0.24.2"}'}

In [5]: print(table.to_pandas())   
Empty DataFrame
Columns: []
Index: []

In [6]: table.to_pandas().index    
Out[6]: RangeIndex(start=0, stop=0, step=1)
{code}
 

> [Python/C++] Empty column selection no longer restores index
> ------------------------------------------------------------
>
>                 Key: ARROW-5139
>                 URL: https://issues.apache.org/jira/browse/ARROW-5139
>             Project: Apache Arrow
>          Issue Type: Bug
>          Components: C++, Python
>    Affects Versions: 0.12.1
>            Reporter: Florian Jetter
>            Priority: Minor
>              Labels: parquet
>
> The index of a dataframe is no longer reconstructed when using empty column 
> selection. This is a regression to 0.12.1 and probably only happens for 
> pd.RangeIndex
> {code:python}
> import pandas as pd
> import pyarrow as pa
> import pyarrow.parquet as pq
> from kartothek.serialization import ParquetSerializer
> from storefact import get_store_from_url
> print(pa.__version__)
> df = pd.DataFrame(
>     {"a": [1, 2]}
> )
> print(df.index)
> table = pa.Table.from_pandas(df)
> buf = pa.BufferOutputStream()
> pq.write_table(table, buf)
> reader = pa.BufferReader(buf.getvalue().to_pybytes())
> table_restored = pq.read_pandas(reader, columns=[])
> df_restored = table_restored.to_pandas()
> print(len(df_restored))
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to