Dataframe.to_ json () не отображает все аргументы (pandas) - PullRequest
0 голосов
/ 03 августа 2020

У меня проблема с функцией .to_ json () в pandas. У меня есть фрейм данных, который включает объект python, строки и целые числа, но когда я хочу преобразовать этот фрейм данных в документ JSON, он просто не включает все параметры объекта python. Вот мой код:

for i in range(len(self.pre_company)):
        id_ = self.pre_company.index.values[i]
        code = self.pre_company.iloc[i][0]
        name = self.pre_company.iloc[i][1]
        group = self.pre_company.iloc[i][2]
        try:
            cdf = self.country.loc[self.pre_company.iloc[i][5]]
            country = Country(self.pre_company.iloc[i][5], cdf[0], cdf[1], cdf[2], cdf[3])
        except KeyError:
            country = None
        town = self.pre_company.iloc[i][4]
        company = {'Country': country, 'Code': code, 'Name': name, 'Group': group, 'Town': town}
        new_row = pd.DataFrame(company, index=[id_])
        if i == 0:
            self.company = new_row
        else:
            self.company = pd.concat([company, new_row])
        del new_row
    del self.pre_company

    data2 = self.company.to_json(orient="records")
    with open('test2.json', 'w') as out:
        for i in data2:
            out.write(str(i))

И для первой строки я получаю такой результат:

{"Country":{"a2code":"FR","ccTLD":".fr","officialName":"The French Republic"},"Code":"blah","Name":"blahblah","Group":"GROUP","Town":"town"}

Вы знаете, почему функция не полностью работает? PS: я использую входной файл CSV для передачи данных в фреймы данных

1 Ответ

0 голосов
/ 05 августа 2020

Я нашел ответ на свою проблему: мне просто нужно было добавить функцию to_dict () к моим python объектам, которые просто записывают объект в dict (как я хотел), и я добавляю этот класс в конце моего python объектного файла:

class CompanyEncoder(json.JSONEncoder):

    def default(self, obj):
       """
       Encodes the object
       :param self: the encoder itself
       :param obj: the object to encode
       :return: the encoded object
       """
       if isinstance(obj, Company):
          return obj.to_dict()
       else:
          return json.JSONEncoder.default(self, obj)

И чтобы преобразовать мой объект в dict, я использовал эти строки (кстати, мне нужно создать объект, прежде чем использовать это:

company = Company(id_, code, name, group, country, town)
self.company.append(company.to_dict())
with open(path, 'w') as out:
    out.write(InvoiceLineEncoder().encode(self.company))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...