Skip to content
Advertisement

Error while reading a JSON file with Python Polars

I am trying to read a GeoJSON with Python Polars, like this:

import polars as pl
myfile = '{"type":"GeometryCollection","geometries":[{"type":"Linestring","coordinates":[[10,11.2],[10.5,11.9]]},{"type":"Point","coordinates":[10,20]}]}'
pl.read_json(myfile) 

The error I get is:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "...local-packagesPython39site-packagespolarsfunctions.py", line 631, in read_json    return DataFrame.read_json(source)  # type: ignore
  File "...local-packagesPython39site-packagespolarsframe.py", line 346, in read_json    
    self._df = PyDataFrame.read_json(file)
RuntimeError: Other("Error("missing field `columns`", line: 1, column: 143)")

I have also tried to put the same content into a file and I had a similar error.

As suggested in GitHub, I tried to read the file via Pandas, like this:

import pandas as pd
initial_df = pl.from_pandas(pd.read_json(file_path))

The error I get is:

File "...file_splitter.py", line 13, in split_file
    initial_df = pl.from_pandas(pd.read_json(file_path))
  File "...local-packagesPython39site-packagespolarsfunctions.py", line 566, in from_pandas
    data[name] = _from_pandas_helper(s)
  File "...local-packagesPython39site-packagespolarsfunctions.py", line 534, in _from_pandas_helper
    return pa.array(a)
  File "pyarrowarray.pxi", line 302, in pyarrow.lib.array
  File "pyarrowarray.pxi", line 83, in pyarrow.lib._ndarray_to_array
  File "pyarrowerror.pxi", line 97, in pyarrow.lib.check_status
pyarrow.lib.ArrowInvalid: cannot mix list and non-list, non-null values

What can I do to read the GeoJSON file?

Advertisement

Answer

If you read the file with pandas you get columsn of type Object where one is not known to Arrow (it could be anything).

If we cast the columns to type string we know that arrow and polars can deal with it.

myfile = '{"type":"GeometryCollection","geometries":[{"type":"Linestring","coordinates":[[10,11.2],[10.5,11.9]]},{"type":"Point","coordinates":[10,20]}]}'
print(pl.from_pandas(pd.read_json(myfile).astype(str)))
shape: (2, 2)
┌────────────────────┬─────────────────────────────────────┐
│ type               ┆ geometries                          │
│ ---                ┆ ---                                 │
│ str                ┆ str                                 │
╞════════════════════╪═════════════════════════════════════╡
│ GeometryCollection ┆ {'type': 'Linestring', 'coordina... │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ GeometryCollection ┆ {'type': 'Point', 'coordinates':... │
└────────────────────┴─────────────────────────────────────┘

User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement