Skip to content

Commit afee531

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

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
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

Lines changed: 2 additions & 3 deletions
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

Lines changed: 23 additions & 0 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy