从api中提取数据时如何从一个字节更改数据类型

时间:2016-06-13 15:19:46

标签: python json pandas python-requests

from requests import Session
import json
import pandas as pd

query = '''SELECT referring_domain, event_name FROM cooladata LIMIT  5000000;'''

def SQLtoURL(query):

    data = query.replace('\n', ' ').replace('\t',' ').replace('   ',' ').replace('  ',' ')
    return data


def QueryCoola(query, file = None):

    session = Session()
    response = session.post(data = {'tq': query,'tqx': "out:csv",},
                              url =    'https://app.abcdefg.com/api/v2/projects/1111111/cql/', 
                              headers = {'Authorization': 'Token ****************'},)

    return response.text.encode('utf-8')



data = QueryCoola(SQLtoURL(query))

现在data类型以字节为单位,如何在列表或字典中获取data,以便我可以将其转换为pandas数据帧?

我目前正在做的是删除encode('utf-8')所以我在文本中获取它并手动将其拆分为一个列表,然后我可以移动到pandas数据框中。问题是空值等等我不想手动处理这些问题。非常感谢任何帮助,谢谢。

print(QueryCoola(SQLtoURL(query)))

输出: B' “referring_domain” \ n “个www.google.com” \ nnull \ n “个mood.reshet.tv” \ n “个m.facebook.com” \ n “个www.google.co.il” \ nnull \ nnull \ N “www.google.com” \ n “个mood.reshet.tv” \ n “个www.google.com” \ N'

1 个答案:

答案 0 :(得分:-1)

首先使用response.content将为您提供未解释的字节请求。

是否要将换行符(\n)上的文字拆分为

your_list = data.split("\n")

这将为您提供此输出:

['"referring_domain"', '"www.google.com"', 'null', '"mood.reshet.tv"', ...]

您可以使用以下内容删除'null'值:

your_list = filter(lambda a: a != "null", your_list)

然后使用以下内容删除不必要的"

your_list = [e[1:-1] for e in your_list]

将会得到你:

['referring_domain', 'www.google.com', 'mood.reshet.tv', 'm.facebook.com', 'www.google.co.il', 'www.google.com', 'mood.reshet.tv', 'www.google.com', '']

要删除最后一个空('')值,请再次过滤列表:

your_list = filter(lambda a: a != "", your_list)