首页 > 解决方案 > 将列的数据提取到变量中

问题描述

我有一个非常大的数据框,其中一列是字典本身。(假设第 12 列)。在那个字典中是一个超链接的一部分,我想得到它。

在 Jupyter 中,我想显示一个包含第 0 列和第 2 列的表格,以及完整的超链接

我想我需要:

让我们只处理第 1 步,我将为接下来的步骤提出其他问题。如何将数据框中的值提取到我可以使用的变量中?

import pytd
import pandas

client = pytd.Client(apikey=widget_api_key.value, database=widget_database.value)
results = client.query(query)
dataframe = pandas.DataFrame(**results)
dataframe
# Not sure what to do next

标签: pythonpandasjupyter

解决方案


如果您只想从字典中提取一个键,并且该字典已作为字典存储在列中,则可以执行以下操作:

import numpy  as np
import pandas as pd

# assuming, your dicts are stored in column 'data'
# and you want to store the url in column 'url'
df['url']= df['data'].map(lambda d: d.get('url', np.NaN) if hasattr(d, 'get') else np.NaN)

# from there you can do your transformation on the url column

测试数据和结果

df= pd.DataFrame({
        'col1': [1, 5, 6],
        'data': [{'url': 'http://foo.org', 'comment': 'not interesting'}, {'comment': 'great site about beer receipes, but forgot the url'}, np.NaN],
        'json': ['{"url": "http://foo.org", "comment": "not interesting"}', '{"comment": "great site about beer receipes, but forgot the url"}', np.NaN]
    }
)

# Result of the logic above:
   col1                                               data             url
0     1  {'url': 'http://foo.org', 'comment': 'not inte...  http://foo.org
1     5  {'comment': 'great site about beer receipes, b...             NaN
2     6                                                NaN             NaN

如果您需要测试,如果您的数据已经存储在 python dicts(而不是字符串)中,您可以按如下方式进行:

print(df['data'].map(type))

如果您的 dicts 存储为字符串,您可以先根据以下代码将它们转换为 dicts:

import json

def get_url_from_json(document):
    if pd.isnull(document):
        url= np.NaN
    else:
        try:
            _dict= json.loads(document)
            url= _dict.get('url', np.NaN)
        except:
            url= np.NaN
    return url

df['url2']= df['json'].map(get_url_from_json)

# output:
print(df[['col1', 'url', 'url2']])   

   col1             url            url2
0     1  http://foo.org  http://foo.org
1     5             NaN             NaN
2     6             NaN             NaN

推荐阅读