首页 > 解决方案 > 遍历字典并向熊猫数据框添加值

问题描述

我刚刚了解了熊猫数据框。我有一个嵌套字典,其中包含我在 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...

虽然我希望得到类似于我在 for 循环中打印出来的 pandas 数据帧格式的东西......

交易者:mr_ahmed_btc (1000+; 99%)||广告 ID:736624||支付方式:CASH_DEPOSIT||美元价格:3866.49||最小-最大:200-9185||支付窗口:270||价格增量:260.05||Pct达美:6.72573833115%

标签: pythonpandasdataframe

解决方案


from_dict没有 kwargs 期望 dicts 采用以下形式:

{"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'])

这直接从字典构造数据帧。

编辑:关于漂亮打印的问题,请查看漂亮打印熊猫数据框

数据框的简单打印只是print(df)

但我不知道这是否能解决你的问题。听起来result['data']['ad_list']['data']可能是 JSON 字符串列表,在这种情况下,您需要执行以下操作:

导入 json 数据 = json.loads(result['data']['ad_list']['data']) df = pd.DataFrame(data)


推荐阅读