influxdata / influxdb-client-python

InfluxDB 2.0 python client
https://influxdb-client.readthedocs.io/en/stable/
MIT License
706 stars 185 forks source link

Flux Script parse failed because of missing value with pivot function #628

Closed supernet29 closed 7 months ago

supernet29 commented 7 months ago

Specifications

Code sample to reproduce problem

param = {
        "_start": start_dt,
        "_stop": start_dt + delta
}
query = f''' from(bucket: "{bucket}") |> range(start: _start, stop: _stop) |> filter(fn: (r) => r["_measurement"] == "pet_raw_signal") |> filter(fn: (r) => r["pet_name"] == "{pet_name}" or r["pet_id"] == "{pet_id}") |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")'''
result = query_api.query_data_frame(query, params=param)

when output file contains empty value(N/A) it makes exception.

Expected behavior

I want to get dataframe like pivot table

Actual behavior

It produce following Exception

Traceback (most recent call last):
  File "/Users/woochankim/Project/AI/download_sensor_data/main.py", line 35, in <module>
    result = query_api.query_data_frame(query, params=param)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/woochankim/Project/AI/download_sensor_data/.venv/lib/python3.11/site-packages/influxdb_client/client/query_api.py", line 254, in query_data_frame
    return self._to_data_frames(_generator)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/woochankim/Project/AI/download_sensor_data/.venv/lib/python3.11/site-packages/influxdb_client/client/_base.py", line 318, in _to_data_frames
    _dataFrames = list(_generator)
                  ^^^^^^^^^^^^^^^^
  File "/Users/woochankim/Project/AI/download_sensor_data/.venv/lib/python3.11/site-packages/influxdb_client/client/flux_csv_parser.py", line 115, in generator
    for val in parser._parse_flux_response():
  File "/Users/woochankim/Project/AI/download_sensor_data/.venv/lib/python3.11/site-packages/influxdb_client/client/flux_csv_parser.py", line 126, in _parse_flux_response
    for val in self._parse_flux_response_row(metadata, csv):
  File "/Users/woochankim/Project/AI/download_sensor_data/.venv/lib/python3.11/site-packages/influxdb_client/client/flux_csv_parser.py", line 228, in _parse_flux_response_row
    flux_record = self.parse_record(metadata.table_index - 1, metadata.table, csv)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/woochankim/Project/AI/download_sensor_data/.venv/lib/python3.11/site-packages/influxdb_client/client/flux_csv_parser.py", line 265, in parse_record
    record.values[column_name] = self._to_value(str_val, fluxColumn)
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/woochankim/Project/AI/download_sensor_data/.venv/lib/python3.11/site-packages/influxdb_client/client/flux_csv_parser.py", line 277, in _to_value
    return self._to_value(np.nan, column)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/woochankim/Project/AI/download_sensor_data/.venv/lib/python3.11/site-packages/influxdb_client/client/flux_csv_parser.py", line 288, in _to_value
    return int(str_val)
           ^^^^^^^^^^^^
ValueError: cannot convert float NaN to integer

Additional info

No response

bednar commented 7 months ago

This is duplicate of https://github.com/influxdata/influxdb-client-python/issues/621