Skip to content

Commit afee531

Browse files
authored
fix: data types for querying into DataFrame (#380)
1 parent 06bb0c6 commit afee531

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
1. [#375](https://github.com/influxdata/influxdb-client-python/pull/375): Construct `InfluxDBError` without HTTP response
55
1. [#378](https://github.com/influxdata/influxdb-client-python/pull/378): Correct serialization DataFrame with nan values [DataFrame]
66
1. [#384](https://github.com/influxdata/influxdb-client-python/pull/384): Timeout can be specified as a `float`
7+
1. [#380](https://github.com/influxdata/influxdb-client-python/pull/380): Correct data types for querying [DataFrame]
78

89
### CI
910
1. [#370](https://github.com/influxdata/influxdb-client-python/pull/370): Add Python 3.10 to CI builds

influxdb_client/client/flux_csv_parser.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@
99

1010
from urllib3 import HTTPResponse
1111

12-
from influxdb_client.client.util.date_utils import get_date_helper
1312
from influxdb_client.client.flux_table import FluxTable, FluxColumn, FluxRecord
14-
13+
from influxdb_client.client.util.date_utils import get_date_helper
1514

1615
ANNOTATION_DEFAULT = "#default"
1716
ANNOTATION_GROUP = "#group"
@@ -187,7 +186,7 @@ def _prepare_data_frame(self):
187186
_temp_df = _temp_df.set_index(self._data_frame_index)
188187

189188
# Append data
190-
return self._data_frame.append(_temp_df)
189+
return self._data_frame.astype(_temp_df.dtypes).append(_temp_df)
191190

192191
def parse_record(self, table_index, table, csv):
193192
"""Parse one record."""

tests/test_FluxCSVParser.py

+23
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,29 @@ def test_pandas_lot_of_columns(self):
235235
_dataFrames = list(parser.generator())
236236
self.assertEqual(1, _dataFrames.__len__())
237237

238+
def test_pandas_column_datatype(self):
239+
data = "#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,string,string,string,string,long,unsignedLong,string,boolean,double\n" \
240+
"#group,false,false,true,true,true,true,true,true,false,false,false,false,false\n" \
241+
"#default,_result,,,,,,,,,,,,\n" \
242+
",result,table,_start,_stop,_field,_measurement,host,region,value1,value2,value3,value4,value5\n" \
243+
",,0,1977-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,free,mem,A,west,121,11,test,true,6.56\n"
244+
parser = self._parse(data=data, serialization_mode=FluxSerializationMode.dataFrame)
245+
df = list(parser.generator())[0]
246+
self.assertEqual(13, df.dtypes.__len__())
247+
self.assertEqual('object', df.dtypes['result'].name)
248+
self.assertEqual('int64', df.dtypes['table'].name)
249+
self.assertIn('datetime64[ns,', df.dtypes['_start'].name)
250+
self.assertIn('datetime64[ns,', df.dtypes['_stop'].name)
251+
self.assertEqual('object', df.dtypes['_field'].name)
252+
self.assertEqual('object', df.dtypes['_measurement'].name)
253+
self.assertEqual('object', df.dtypes['host'].name)
254+
self.assertEqual('object', df.dtypes['region'].name)
255+
self.assertEqual('int64', df.dtypes['value1'].name)
256+
self.assertEqual('int64', df.dtypes['value2'].name)
257+
self.assertEqual('object', df.dtypes['value3'].name)
258+
self.assertEqual('bool', df.dtypes['value4'].name)
259+
self.assertEqual('float64', df.dtypes['value5'].name)
260+
238261
@staticmethod
239262
def _parse_to_tables(data: str, serialization_mode=FluxSerializationMode.tables):
240263
_parser = FluxCsvParserTest._parse(data, serialization_mode)

0 commit comments

Comments
 (0)