>

pyarrow 0.6.0(또는 열등한)을 사용하면 다음 코드 조각으로 인해 파이썬 인터프리터가 중단됩니다.

data = pd.DataFrame({'a': [1, True]})
pa.Table.from_pandas(data)

"파이썬 인터프리터가 작동을 멈췄습니다"(창 아래)

  • 답변 # 1

    일부 조사에 따르면,이 Jira 문제에 따라pyarrow 0.7.0에서 문제가 해결되었으며,보다 정확하게는 질문에서와 동일한 스 니펫을 사용하여 커밋합니다. 다음 오류 :

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "table.pxi", line 755, in pyarrow.lib.Table.from_pandas
    File "C:\Temp\tt\Tools\Anaconda3.4.3.1\envs\GMF_test3\lib\site-packages\pyarrow\pandas_compat.py", line 227, in dataframe_to_arrays
        col, type=type, timestamps_to_ms=timestamps_to_ms
    File "array.pxi", line 225, in pyarrow.lib.Array.from_pandas
    File "error.pxi", line 77, in pyarrow.lib.check_status
    pyarrow.lib.ArrowInvalid: Error converting from Python objects to Int64: Got Python object of type bool but can only handle these ty
    pes: integer
    
    

    이 문제를 해결할 수있는 한 가지 가능성은 데이터를 마스터하고 다음과 같이 예외가 발생할 때 혼합 dtype으로 열을 변환하는 것입니다 (일반적인 실수가 아닌 예외를 기록 할 수 있음).

    import pandas as pd
    import pyarrow as pa
    import logging
    logger = logging.getLogger(__name__)
    data = pd.DataFrame({'a': [1, True], 'b': [1, 2]})
    
    def convert_type_if_needed(type_to_select, df, col_name):
        types = []
        for i in df[col_name]:
            types.append(type(i))
        if type_to_select in types:
            return df.astype({col_name: type_to_select})
        else:
            raise TypeError(str(type_to_select) + " is not in the dataframe, conversion impossible")
    
    try:
        table = pa.Table.from_pandas(data)
    except pa.lib.ArrowInvalid as e:
        logger.warning(e)
        data = convert_type_if_needed(int, data, 'a')
        table = pa.Table.from_pandas(data)
    print(table)
    
    

    마지막으로 산출하는 것 :

    pyarrow.Table
    Error converting from Python objects to Int64: Got Python object of type bool but can only handle these types: integer
    a: int32
    b: int64
    __index_level_0__: int64
    metadata
    --------
    {b'pandas': b'{"columns": [{"name": "a", "numpy_type": "int32", "pandas_type":'
                b' "int32", "metadata": null}, {"name": "b", "numpy_type": "int64"'
                b', "pandas_type": "int64", "metadata": null}, {"name": "__index_l'
                b'evel_0__", "numpy_type": "int64", "pandas_type": "int64", "metad'
                b'ata": null}], "index_columns": ["__index_level_0__"], "pandas_ve'
                b'rsion": "0.20.3"}'}
    
    

  • 이전 python - 주어진 단어 벡터는 word2vec에서 단어를 얻습니다
  • 다음 javascript - 내 json 요소를 어떻게 처리 할 수 ​​있습니까?