@@ -808,29 +808,60 @@ def test_list_columns_and_indexes_with_named_index_same_as_column_name(
808
808
@pytest .mark .skipif (pandas is None , reason = "Requires `pandas`" )
809
809
def test_dataframe_to_json_generator (module_under_test ):
810
810
utcnow = datetime .datetime .utcnow ()
811
- df_data = collections .OrderedDict (
812
- [
813
- ("a_series" , [pandas .NA , 2 , 3 , 4 ]),
814
- ("b_series" , [0.1 , float ("NaN" ), 0.3 , 0.4 ]),
815
- ("c_series" , ["a" , "b" , pandas .NA , "d" ]),
816
- ("d_series" , [utcnow , utcnow , utcnow , pandas .NaT ]),
817
- ("e_series" , [True , False , True , None ]),
818
- ]
819
- )
820
811
dataframe = pandas .DataFrame (
821
- df_data , index = pandas .Index ([4 , 5 , 6 , 7 ], name = "a_index" )
812
+ {
813
+ "a_series" : [1 , 2 , 3 , 4 ],
814
+ "b_series" : [0.1 , float ("NaN" ), 0.3 , 0.4 ],
815
+ "c_series" : ["a" , "b" , pandas .NA , "d" ],
816
+ "d_series" : [utcnow , utcnow , utcnow , pandas .NaT ],
817
+ "e_series" : [True , False , True , None ],
818
+ # Support nullable dtypes.
819
+ # https://github.com/googleapis/python-bigquery/issues/1815
820
+ "boolean_series" : pandas .Series (
821
+ [True , False , pandas .NA , False ], dtype = "boolean"
822
+ ),
823
+ "int64_series" : pandas .Series ([- 1 , pandas .NA , - 3 , - 4 ], dtype = "Int64" ),
824
+ }
822
825
)
823
826
824
- dataframe = dataframe .astype ({"a_series" : pandas .Int64Dtype ()})
827
+ # Index is not included, even if it is not the default and has a name.
828
+ dataframe = dataframe .rename (index = lambda idx : idx + 4 )
829
+ dataframe .index .name = "a_index"
825
830
826
- rows = module_under_test .dataframe_to_json_generator (dataframe )
831
+ rows = list ( module_under_test .dataframe_to_json_generator (dataframe ) )
827
832
expected = [
828
- {"b_series" : 0.1 , "c_series" : "a" , "d_series" : utcnow , "e_series" : True },
829
- {"a_series" : 2 , "c_series" : "b" , "d_series" : utcnow , "e_series" : False },
830
- {"a_series" : 3 , "b_series" : 0.3 , "d_series" : utcnow , "e_series" : True },
831
- {"a_series" : 4 , "b_series" : 0.4 , "c_series" : "d" },
833
+ {
834
+ "a_series" : 1 ,
835
+ "b_series" : 0.1 ,
836
+ "c_series" : "a" ,
837
+ "d_series" : utcnow ,
838
+ "e_series" : True ,
839
+ "boolean_series" : True ,
840
+ "int64_series" : - 1 ,
841
+ },
842
+ {
843
+ "a_series" : 2 ,
844
+ "c_series" : "b" ,
845
+ "d_series" : utcnow ,
846
+ "e_series" : False ,
847
+ "boolean_series" : False ,
848
+ },
849
+ {
850
+ "a_series" : 3 ,
851
+ "b_series" : 0.3 ,
852
+ "d_series" : utcnow ,
853
+ "e_series" : True ,
854
+ "int64_series" : - 3 ,
855
+ },
856
+ {
857
+ "a_series" : 4 ,
858
+ "b_series" : 0.4 ,
859
+ "c_series" : "d" ,
860
+ "boolean_series" : False ,
861
+ "int64_series" : - 4 ,
862
+ },
832
863
]
833
- assert list ( rows ) == expected
864
+ assert rows == expected
834
865
835
866
836
867
@pytest .mark .skipif (pandas is None , reason = "Requires `pandas`" )
0 commit comments