我正在嘗試從初始 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 slices, 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 資料框?先感謝您!
uj5u.com熱心網友回復:
將該檔案加載到 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
uj5u.com熱心網友回復:
非常感謝 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])
再次感謝:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434115.html
下一篇:帶問號的URL格式
