如何使用请求从 url 转换包含 pandas 数据框中的行(字符串)的列表
How do I convert a list containing lines(in string) in a pandas data frame from an url using requests
我正在尝试从初始 uniprot url:
获取最终的 pandas 数据帧
import requests
url = 'http://www.uniprot.org/uniprot/?query=Interferon+lambda+receptor+1&sort=score&format=tab'
req = requests.get(url)
输出:
req.text
是这样的:
""Entry\tEntry name\tStatus\tProtein names\tGene names\tOrganism\tLength\nQ8IU57\tINLR1_HUMAN\treviewed\tInterferon lambda receptor 1 (IFN-lambda receptor 1) (IFN-lambda-R1) (Cytokine receptor class-II member 12) (Cytokine receptor family 2 member 12) (CRF2-12) (Interleukin-28 receptor subunit alpha) (IL-28 receptor subunit alpha) (IL-28R-alpha) (IL-28RA) (Likely interleukin or cytokine receptor 2).....
得到我做的台词:
lines = req.text.splitlines()
#每一行都用逗号分隔 ' ', ' ', ...
#列由'\t'
分隔
如果我使用:
import re
re.split(r'\t+', lines[0])
这样可以正确拆分每列。
Out:
['Entry',
'Entry name',
'Status',
'Protein names',
'Gene names',
'Organism',
'Length']
但是,如果我想做一个 for 循环并在所有行上执行它,我会得到一个错误:string2list(lines): list indices must be integers or slice, not str'
import re
def string2list(file):
list = []
for i in lines:
re.split(r'\t+', lines[i])
list += lines
return list
我的目标是得到一个列表列表最终使用这个代码:
import pandas as pd
list_name = lines
df = pd.DataFrame (list_name, columns = lines[i])
关于什么是最佳方法有什么想法吗?是否可以将列表中的字符串转换为列表列表?什么是最好的方法?还是有另一种方法可以直接从 url 到达 pandas 数据框?
提前致谢!
将该文件加载到 DataFrame 中的最简单方法是使用 pd.read_csv()
,它支持 url 输入。
import pandas as pd
url = 'http://www.uniprot.org/uniprot/?query=Interferon+lambda+receptor+1&sort=score&format=tab'
df = pd.read_csv(url, sep='\t')
顺便说一句,关于您的代码:
def string2list(file):
list = []
for i in lines:
re.split(r'\t+', lines[i])
list += lines
return list
有几个问题。
file
未使用
lines
未定义
i
是字符串,不是整数。
- 因此,您的意思可能是
re.split(r'\t+', i)
list += lines
可能不是你的意思...
- 您的
return
语句在 for 循环内,而不是在外部范围内。
IIUC,我想你的目标是写这样的东西:
def split_lines(file):
with open(file, 'r') as f:
lines = f.readlines()
results = []
for line in lines:
words = re.split(r'\t', line.strip())
results.append(words)
return results
非常感谢 Stuart 的 `pd.read_csv()' 功能。它以一种非常有效的方式完全满足了我的需求!
另外一个for循环,非常感谢指正!
这也有效,感谢您对 for 循环的投入:
def split_lines2(url):
req = requests.get(url)
lines = req.text.splitlines()
results = []
for line in lines:
words = re.split(r'\t', line.strip())
results.append(words)
return results
test_x = split_lines2(my_url) #this give a list of lists
df = pd.DataFrame (data = test_x, columns = test_x[0])
df_drop_row_1 = df.drop(df.index[0])
再次感谢:)
我正在尝试从初始 uniprot url:
获取最终的 pandas 数据帧import requests
url = 'http://www.uniprot.org/uniprot/?query=Interferon+lambda+receptor+1&sort=score&format=tab'
req = requests.get(url)
输出:
req.text
是这样的:
""Entry\tEntry name\tStatus\tProtein names\tGene names\tOrganism\tLength\nQ8IU57\tINLR1_HUMAN\treviewed\tInterferon lambda receptor 1 (IFN-lambda receptor 1) (IFN-lambda-R1) (Cytokine receptor class-II member 12) (Cytokine receptor family 2 member 12) (CRF2-12) (Interleukin-28 receptor subunit alpha) (IL-28 receptor subunit alpha) (IL-28R-alpha) (IL-28RA) (Likely interleukin or cytokine receptor 2).....
得到我做的台词:
lines = req.text.splitlines()
#每一行都用逗号分隔 ' ', ' ', ... #列由'\t'
分隔如果我使用:
import re
re.split(r'\t+', lines[0])
这样可以正确拆分每列。
Out:
['Entry',
'Entry name',
'Status',
'Protein names',
'Gene names',
'Organism',
'Length']
但是,如果我想做一个 for 循环并在所有行上执行它,我会得到一个错误:string2list(lines): list indices must be integers or slice, not str'
import re
def string2list(file):
list = []
for i in lines:
re.split(r'\t+', lines[i])
list += lines
return list
我的目标是得到一个列表列表最终使用这个代码:
import pandas as pd
list_name = lines
df = pd.DataFrame (list_name, columns = lines[i])
关于什么是最佳方法有什么想法吗?是否可以将列表中的字符串转换为列表列表?什么是最好的方法?还是有另一种方法可以直接从 url 到达 pandas 数据框? 提前致谢!
将该文件加载到 DataFrame 中的最简单方法是使用 pd.read_csv()
,它支持 url 输入。
import pandas as pd
url = 'http://www.uniprot.org/uniprot/?query=Interferon+lambda+receptor+1&sort=score&format=tab'
df = pd.read_csv(url, sep='\t')
顺便说一句,关于您的代码:
def string2list(file):
list = []
for i in lines:
re.split(r'\t+', lines[i])
list += lines
return list
有几个问题。
file
未使用lines
未定义i
是字符串,不是整数。- 因此,您的意思可能是
re.split(r'\t+', i)
list += lines
可能不是你的意思...- 您的
return
语句在 for 循环内,而不是在外部范围内。
IIUC,我想你的目标是写这样的东西:
def split_lines(file):
with open(file, 'r') as f:
lines = f.readlines()
results = []
for line in lines:
words = re.split(r'\t', line.strip())
results.append(words)
return results
非常感谢 Stuart 的 `pd.read_csv()' 功能。它以一种非常有效的方式完全满足了我的需求!
另外一个for循环,非常感谢指正!
这也有效,感谢您对 for 循环的投入:
def split_lines2(url):
req = requests.get(url)
lines = req.text.splitlines()
results = []
for line in lines:
words = re.split(r'\t', line.strip())
results.append(words)
return results
test_x = split_lines2(my_url) #this give a list of lists
df = pd.DataFrame (data = test_x, columns = test_x[0])
df_drop_row_1 = df.drop(df.index[0])
再次感谢:)