Итерация по словарю и добавление значений в фрейм данных pandas - PullRequest
0 голосов
/ 18 января 2019

Я только что узнал о панмах данных. У меня есть вложенный словарь, который имеет значения, которые я извлекаю в цикле for. Каков наилучший способ преобразовать эти данные в фрейм данных?


   if result != None:
    for ads in result['data']['ad_list']:

        #print getOnlineProvider(currency)
        if(ads['data']['online_provider'] in onlineprovider):

            #"NATIONAL_BANK") or 
            #(ads['data']['online_provider'] =="SPECIFIC_BANK") or 
            #(ads['data']['online_provider'] =="ALTCOIN_DASH") or 
            #(ads['data']['online_provider'] =="CASH_DEPOSIT")):

            trader = ads['data']['profile']['name']
            adusdprice = ads['data']['temp_price_usd']
            delta =  float(adusdprice) - float(btcprice)
            deltapercent =  (1 -  (float(btcprice)/float(adusdprice))) * 100
            adid = ads['data']['ad_id']
            maxamount = ads['data']['max_amount']
            minamount = ads['data']['min_amount']
            paywindow = ads['data']['payment_window_minutes']

            print("Trader:" + trader + "||" + "Ad ID:" + str(adid) + "||"+ "paymethod: " + ads['data']['online_provider'] + "||" + "USD price: " + adusdprice + "||"+ "min-max: " + str(minamount) + "-" + str(maxamount) +"||" + "PayWindow: " + str(paywindow) + "||" + "Price delta: " + str(delta) + "||"+ "Pct Delta: " + str(deltapercent) + "%") 

print("=====================================================") 

Я пытался создать фрейм данных из dict с

pd.DataFrame.from_dict(result['data']['ad_list']['data'])

но это не работает, насколько я могу судить, мне нужно делать это построчно, так как я извлекаю каждое значение, чтобы получить его правильно ..

это результат фрейма данных, который я получаю с помощью вышеуказанной команды.

{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 90, u'hidden_by_op...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...
{u'public_view': u'https://localbitcoins.com/a...  {u'require_feedback_score': 0, u'hidden_by_ope...

в то время как я ищу что-то в формате pandas dataframe, похожем на то, что я печатаю в цикле for ...

Трейдер: mr_ahmed_btc (1000+; 99%) || ID объявления: 736624 || метод оплаты: CASH_DEPOSIT || Цена в долларах США: 3866.49 || мин-макс: 200-9185 || PayWindow: 270 || Дельта: 260.05 || Pct Delta: 6,72573833115%

1 Ответ

0 голосов
/ 18 января 2019

from_dict без kwargs ожидает, что дикты будут в форме:

{"colname1": [1,2,3,4], "colname2": [2,3,4,5]}

Нелегко определить из вашего вопроса, какова структура result['data']['ad_list']['data'], но я думаю, что это что-то вроде:

[
    {
      "dog": "cat",
      "cat": "dog",
      "bug": 234
    },
    {
        "dog": "hot",
        "cat": "tin roof",
        "bug": 432
    }
]

В этом случае используйте:

df = pd.DataFrame(result['data']['ad_list']['data'])

Это создает фрейм данных непосредственно из dict.

Редактировать: к вашему вопросу о красивой печати, посмотрите Pretty Printing pandas dataframe

Простая печать кадра данных всего лишь print(df)

Но я не знаю, решит ли это вашу проблему. Похоже, что result['data']['ad_list']['data'] может быть списком строк JSON, в этом случае вам нужно будет сделать что-то вроде:

импорт JSON data = json.loads (результат ['data'] ['ad_list'] ['data']) df = pd.DataFrame (data)

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