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

时间:2018-03-12 10:39:11

标签: python json pandas csv

我有一个包含公司名称列的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'}

3 个答案:

答案 0 :(得分:1)

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

另外两点:

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

答案 1 :(得分:0)

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

  1. 从clearbit返回的数据中提取域
  2. 使用Pandas
    1. Clearbit API返回字典。你可以这样做:
    2. 像这样:

      data = clearbit.NameToDomain.find(name=n)
      print(data) # Dictionary
      print(data['domain']) # Domain value
      
      1. 使用Pandas时,不要循环数据
      2. 使用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')
        
          

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

             

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

答案 2 :(得分:0)

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