рдбреЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдХреЛ рдкрд╛рдпрдерди 3.7 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
рдкрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП .from_dataclasses
рдпрд╛ рдХреЗрд╡рд▓ .DataFrame(data=dataclass_list)
рдкрд░ рдХреЙрд▓ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред .to_dataclasses
рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рднреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
from dataclasses import dataclass
import pandas as pd
<strong i="12">@dataclass</strong>
class SimpleDataObject(object):
field_a: int
field_b: str
dataclass_object1 = SimpleDataObject(1, 'a')
dataclass_object2 = SimpleDataObject(2, 'b')
>>> asd
# Dataclasses to DataFrame
df = pd.from_dataclasses([dataclass_object1, dataclass_object2])
df.dtypes == ['field_a', 'field_b']
>>> True
df.dtypes == ['int', 'str']
>>> True
# Dataclasses to DataFrame
df = pd.DataFrame(data=[dataclass_object1, dataclass_object2])
df.dtypes == ['field_a', 'field_b']
>>> True
df.dtypes == ['int', 'str']
>>> True
# DataFrame to Dataclasses
df = pd.DataFrame(columns=['field_a', 'field_b'], data=[[1, 'a'], [2, 'b']])
dataclass_list = df.to_dataclasses()
dataclass_list == [dataclass_object1, dataclass_object2]
>>> True
AFAIK рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛рдХреНрд▓рд╛рд╕ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдбреЗрдЯрд╛рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИрдВред
рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ:
<strong i="7">@dataclass</strong>
class SimpleDataObject(object):
field_a: int
field_b: str
x = SimpleDataObject(a=2, b=тАШfтАЩ)
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рд╕реЗ рднреА рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ x
рдПрдХ рдбреЗрдЯрд╛рдХреНрд▓рд╛рд╕ рд╣реИ, рд╣реИ рдирд╛? рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ рддреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
dataclasses
рдореЙрдбреНрдпреВрд▓ рдореЗрдВ is_dataclass
рдФрд░ fields
рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рд╣реИрдВ, рддрд╛рдХрд┐ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рди рд╣реЛред
рдЙрд╕ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреАрдЖрдИ/рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рд╕реЗ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрднреА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ asdict
рд╣реЗрд▓реНрдкрд░ рдирд┐рдЧрд▓рдирд╛ рдпреВрдЬрд╝рдХреЗрд╕ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
In [18]: from dataclasses import asdict
In [19]: pd.DataFrame([asdict(x) for x in [dataclass_object1, dataclass_object2]])
Out[19]:
field_a field_b
0 1 a
1 2 b
рдореИрдВрдиреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕ рдкреАрдЖрд░ рдореЗрдВ __init__ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдПрдХрд╛рдзрд┐рдХ py-рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреБрдЫ рдФрд░ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
dataclasses
рдореЙрдбреНрдпреВрд▓ рдореЗрдВis_dataclass
рдФрд░fields
рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рд╣реИрдВ, рддрд╛рдХрд┐ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рди рд╣реЛредрдЙрд╕ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреАрдЖрдИ/рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рд╕реЗ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрднреА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ
asdict
рд╣реЗрд▓реНрдкрд░ рдирд┐рдЧрд▓рдирд╛ рдпреВрдЬрд╝рдХреЗрд╕ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред