繁体   English   中英

如何通过python中的字典按名称获取值

[英]how to get value by name from dictionary in 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中提供了域名徽标和名称,但如何仅使用域名

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

csv文件如下所示

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

预期产量

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'}

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

另外两点:

  • 将您的身份验证密钥发布到clearbit可能不是一个好主意
  • 在csv文件中发布人员的姓名和职称也可能不是一个好主意,除非您已将所有这些数据整理好。

根据该问题,有两件事:

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

  1. Clearbit API返回字典。 您可以简单地做:

像这样:

data = clearbit.NameToDomain.find(name=n)
print(data) # Dictionary
print(data['domain']) # Domain value
  1. 与熊猫一起工作时,您无需循环处理数据

使用申请

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')

此代码从提供的CSV导入数据。 您可以改为在parse_url方法中调用clearbit API并返回适当的值。

该解决方案适用于Python3。 请以此为起点,而不是复制粘贴解决方案。

由于它是字典,因此我们可以为其分配一些默认值,并将其存储在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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM