This repository was archived by the owner on Apr 1, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 68
Expand file tree
/
Copy pathconvert.py
More file actions
131 lines (104 loc) · 3.79 KB
/
convert.py
File metadata and controls
131 lines (104 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import annotations
from typing import Optional
import pandas as pd
from bigframes import dataframe, series, session
from bigframes.core import global_session, indexes
def can_convert_to_series(obj) -> bool:
if isinstance(obj, series.Series):
return True
if isinstance(obj, pd.Series):
return True
if isinstance(obj, indexes.Index):
return True
if isinstance(obj, pd.Index):
return True
if pd.api.types.is_list_like(obj):
return True
return False
def to_bf_series(
obj,
default_index: Optional[indexes.Index],
session: Optional[session.Session] = None,
) -> series.Series:
"""
Convert a an object to a bigframes series
Args:
obj (list-like or Series):
Object to convert to bigframes Series
default_index (list-like or Index or None):
Index to use if obj has no index
Returns
bigframes.pandas.Series
"""
if isinstance(obj, series.Series):
return obj.copy()
if session is None:
session = global_session.get_global_session()
if isinstance(obj, pd.Series):
return series.Series(obj, session=session)
if isinstance(obj, indexes.Index):
return series.Series(obj, default_index, session=session)
if isinstance(obj, pd.Index):
return series.Series(obj, default_index, session=session)
if pd.api.types.is_dict_like(obj):
return series.Series(obj, session=session)
if pd.api.types.is_list_like(obj):
return series.Series(obj, default_index, session=session)
raise TypeError(f"Cannot interpret {obj} as series.")
def to_pd_series(obj, default_index: pd.Index) -> pd.Series:
"""
Convert a an object to a pandas series
Args:
obj (list-like or Series):
Object to convert to pandas Series
default_index (list-like or Index or None):
Index to use if obj has no index
Returns
pandas.Series
"""
if isinstance(obj, series.Series):
return obj.to_pandas()
if isinstance(obj, pd.Series):
return obj
if isinstance(obj, indexes.Index):
return pd.Series(obj.to_pandas(), default_index)
if isinstance(obj, pd.Index):
return pd.Series(obj, default_index)
if pd.api.types.is_dict_like(obj):
return pd.Series(obj)
if pd.api.types.is_list_like(obj):
return pd.Series(obj, default_index)
raise TypeError(f"Cannot interpret {obj} as series.")
def can_convert_to_dataframe(obj) -> bool:
if can_convert_to_series(obj):
return True
if isinstance(obj, dataframe.DataFrame) or isinstance(obj, pd.DataFrame):
return True
return False
def to_bf_dataframe(
obj,
default_index: Optional[indexes.Index],
session: Optional[session.Session] = None,
) -> dataframe.DataFrame:
if isinstance(obj, dataframe.DataFrame):
return obj.copy()
if isinstance(obj, pd.DataFrame):
if session is None:
session = global_session.get_global_session()
return dataframe.DataFrame(obj, session=session)
if can_convert_to_series(obj):
return to_bf_series(obj, default_index, session).to_frame()
raise TypeError(f"Cannot interpret {obj} as a dataframe.")