Создать DataFrame из объекта класса, используя атрибуты класса в качестве заголовка для столбцов - PullRequest
0 голосов
/ 13 марта 2020

У меня есть этот класс Проект , который я хотел бы преобразовать в DataFrame

projects = [(Project){
   id = 21
   UserDefinedFields = ""
   ProjectName = "Connecting Python Script to AutoTask"
   AccountID = 0
   Type = 4
   ExtPNumber = ""
   ProjectNumber = "P20200311.0001"
   Description = "This project is to test connection between a script and the CRM platform of AutoTask"
   CreateDateTime = 2020-03-11 04:00:00+00:00
   CreatorResourceID = 29684475
   StartDateTime = 2020-03-11 04:00:00+00:00
   EndDateTime = 2020-03-12 04:00:00+00:00
   Status = 1
   ProjectLeadResourceID = 29684475
   CompletedPercentage = 0
   StatusDetail = ""
   StatusDateTime = 2020-03-11 15:34:50.310000+00:00
   LastActivityResourceID = 29684475
   LastActivityDateTime = 2020-03-11 15:34:50.433000+00:00
   LastActivityPersonType = 1
 }, (Project){
   id = 22
   UserDefinedFields = ""
   ProjectName = "Larry and Brittany Test"
   AccountID = 29683567
   Type = 5
   ExtPNumber = ""
   ProjectNumber = "P20200311.0002"
   Description = ""
   CreateDateTime = 2020-03-11 04:00:00+00:00
   CreatorResourceID = 29684474
   StartDateTime = 2020-03-11 04:00:00+00:00
   EndDateTime = 2020-03-12 04:00:00+00:00
   Duration = 2
   ActualHours = 0.0
   ActualBilledHours = 0.0
   EstimatedTime = 0.0
   LaborEstimatedRevenue = 0.0
   LaborEstimatedCosts = 0.0
   LaborEstimatedMarginPercentage = 0.0
   ProjectCostsRevenue = 0.0
   ProjectCostsBudget = 0.0
   ProjectCostEstimatedMarginPercentage = 0.0
   ChangeOrdersRevenue = 0.0
   SGDA = 0.0
   OriginalEstimatedRevenue = 0.0
   EstimatedSalesCost = 0.0
   Status = 1
   ProjectLeadResourceID = 29684474
   CompletedPercentage = 0
   StatusDetail = ""
   StatusDateTime = 2020-03-11 22:08:22.267000+00:00
   PurchaseOrderNumber = ""
   LastActivityResourceID = 29684474
   LastActivityDateTime = 2020-03-11 22:08:22.377000+00:00
   LastActivityPersonType = 1
 }]

id, UserDefinedFields, AccountID - все атрибуты класса Project

Я хочу создать фрейм данных , подобный этому

id | UserDefinedFields | AccountID | ... |LastActivitityPersonType
21 |                   | 0         | ... |
22 |                   | 29683567  |.....| 1

Для объекта, который не имеет значения атрибута, фрейм данных должен добавить пустая строка

1 Ответ

0 голосов
/ 13 марта 2020
  1. Без изменения класса:
pd.DataFrame([
  {
    k: v 
    for k, v 
    in project.__dict__.items() 
    if not callable(v)
  }
  for project in projects
])
Добавить метод to_dict и использовать from_records
class Project
   def to_dict(self):
     return {
       attr: getattr(self, attr, '')
       for attr in ['id', 'UserDefinedFields' .... ]  
     }

   ...

pd.Dataframe.from_records(projects)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...