python中如何从字典中按名称获取值

2024-05-16 16:26:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件与公司名称列,我需要找到它的域名,并存储在同一个csv文件旁边的公司名称

到目前为止我使用的代码

import pandas as pd
import clearbit
import json
clearbit.key = 'your secret key'
df = pd.read_csv("/home/vipul/Desktop/new.csv", sep=',', encoding="utf-8")

saved_column = df['Company']
i=0
for data in saved_column:   

    n = saved_column[i]
    i = i+1
    domain = clearbit.NameToDomain.find(name=n)
    print(domain)
    l = json.loads(domain)
    print(l['domain'])

这里的代码以json格式提供域名logo和域名,但如何只获取域名

但这会产生错误
l = json.loads(domain) print(l['domain'])
错误:
TypeError: the JSON object must be str, not 'NameToDomain'

The csv file looks like this

Company
‎Accenture
‎AND Digital
‎Accenture
‎Kite Consulting Group
‎Capgemini

expected output

Company                 Domain
‎Accenture              accenture.com
‎AND Digital            and.digital
‎Accenture              accenture.com
‎Kite Consulting Group  None
‎Capgemini              capgemini.com

json看起来像

Name: Company, dtype: object
{'name': 'Accenture', 'logo': 'https://logo.clearbit.com/accenture.com', 'domain': 'accenture.com'}
{'name': 'AND Digital', 'logo': 'https://logo.clearbit.com/and.digital', 'domain': 'and.digital'}
{'name': 'Accenture', 'logo': 'https://logo.clearbit.com/accenture.com', 'domain': 'accenture.com'}
None
{'name': 'Capgemini', 'logo': 'https://logo.clearbit.com/capgemini.com', 'domain': 'capgemini.com'}

Tags: csvnamehttpsimportcomjsondomaincolumn
3条回答

根据文档,clearbit.NameToDomain.find(name=n)返回一个字典,因此您可以像访问任何其他python字典一样访问它的值。你不在乎它来自json,那是为你处理的。(同样,这个问题与csv无关)。你知道吗

另外两点:

  • 将身份验证密钥发布到clearbit可能是个坏主意
  • 在csv文件中发布人员的姓名和职务也可能是个坏主意,除非你已经编造了所有这些数据。你知道吗

基于这个问题,有两件事:

  1. 从clearbit返回的数据中提取域
  2. 与熊猫合作

  1. clearbitapi返回一个字典。您只需执行以下操作:

像这样:

data = clearbit.NameToDomain.find(name=n)
print(data) # Dictionary
print(data['domain']) # Domain value
  1. 对于熊猫,你不需要在数据上循环

使用apply

import pandas as pd
from urllib.parse import urlparse

def parse_url(x):
    return 'unknown' if pd.isnull(x) else urlparse(x)[1]

df = pd.read_csv("./new.csv")
df['domain'] = df['Profile URL'].apply(parse_url)
df_new = df.loc[:, ['Company', 'domain']]

编辑:

clearbit解析器的实现方式如下(我没有尝试过这段代码,但它应该可以工作):

import clearbit
def parse_url(x):
    return 'unknown' if pd.isnull(x)

    data = clearbit.NameToDomain.find(name=x)
    return data.get('domain', 'Default value')

This code imports data from the CSV provided. You may instead call the clearbit API in the parse_url method and return appropriate value.

This solution works on Python3. Please take it as a starting point and not as a copy-paste solution.

因为它是一个字典,我们可以给它分配一些默认值,并存储在csv文件中,然后删除它就可以了:)

编辑的代码

import pandas as pd
import clearbit
import json
clearbit.key = 'your key'
df = pd.read_csv("/home/vipul/Desktop/new.csv", sep=',', encoding="utf-8")
saved_column = df['Company'].dropna()
i=0
res = []
for data in saved_column:   
    n = saved_column.get(i)
    print(n)
    i = i+1
    data = clearbit.NameToDomain.find(name=n) 
    if data != None: 
        res.append(data['domain'])
    else:
        res.append('domain.com')
print(res)
df['Domain'] = res
df.to_csv("/home/vipul/Desktop/new.csv",index = False, skipinitialspace=False)

print("File saved to desktop as new.csv")

相关问题 更多 >