我在ipython中工作;我有一個Yaml文件和與我的Yaml文件對應的[thomas] id列表(thomas: - 文件第三行)。以下只是該文件的一小部分內容。完整的文件可以在這裏(https://github.com/108michael/congress-legislators/blob/master/legislators-historical.yaml)從基於Python列表的yaml文件檢索數據
- id:
bioguide: C000858
thomas: '00246'
lis: S215
govtrack: 300029
opensecrets: N00002091
votesmart: 53288
icpsr: 14809
fec:
- S0ID00057
wikipedia: Larry Craig
house_history: 11530
name:
first: Larry
middle: E.
last: Craig
bio:
birthday: '1945-07-20'
gender: M
religion: Methodist
terms:
- type: rep
start: '1981-01-05'
end: '1983-01-03'
state: ID
district: 1
party: Republican
- type: rep
start: '1983-01-03'
end: '1985-01-03'
state: ID
district: 1
party: Republican
我想分析的文件中找到,並在我的列表中的每個ID對應一個ID在[托馬斯:]我想要檢索以下內容:[FEC] :(可能有不止一種,我需要所有這些)[名稱:] [第一名:] [中:] [最後:]; [生物:] [生日:]; [條款:](可能有不止一個條款,我需要所有條款)[類型:] [開始:] [狀態:] [聚會:]。最後,也可能有fec數據不可用的情況。
1)我應該如何存儲數據?我對Python(我的第一種編程語言)還比較陌生,我不確定如何存儲數據。直覺上,我會說字典;然而,最重要的是訪問和數據檢索的簡易性。以前,我將相似的嵌套數據存儲爲csv。這種方法似乎有點笨重。如果我能夠從字典(我檢索的數據)中列出一個列表(來自我擁有的托馬斯ID),這似乎是理想的。
2)我不知道如何設置for/while語句,以便我只檢索對應於我的托馬斯id列表的數據。
我開始寫我所期望的將是代碼編寫的信息,以CSV:
import pandas as pd
import yaml
import glob
import CSV
df = pd.concat((pd.read_csv(f, names=['date','bill_id','sponsor_id']) for f in glob.glob('/home/jayaramdas/anaconda3/df/s11?_s_b')))
outputfile = open('sponsor_details', 'W', newline='')
outputwriter = csv.writer(outputfile)
df = df.drop_duplicates('sponsor_id')
sponsor_list = df['sponsor_id'].tolist()
with open('legislators-historical.yaml', 'r') as f:
data = yaml.load(f)
for sponsor in sponsor_list:
where sponsor == data[0]['thomas']:
x = data[0]['thomas']
a = data[0]['name']['first']
b = data[0]['name']['middle']
c = data[0]['name']['last']
d = data[0]['bio']['gender']
e = data[0]['bio']['religion']
for fec in data[0]['id']:
c = fec.get('fec')
for terms in data[0]['id']:
t = terms.get('type')
s = terms.get('start')
state = terms.get('state')
p = terms.get('party')
outputwriter.writerow([x, a, b, c, d, e, c, t, s, state, p])
outputfile.flush()
我收到以下錯誤:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-48-057d25de7e11> in <module>()
15
16 for sponsor in sponsor_list:
---> 17 if sponsor == data[0]['thomas']:
18 x = data[0]['thomas']
19 a = data[0]['name']['first']
KeyError: 'thomas'
也許有助於改變'在sponsor_list爲f贊助商:''要在SPO贊助商nsor_list:' – jezrael
我剛試過你的建議和問題。我仍然收到以下錯誤:「文件」「,第17行 其中贊助==數據[0] [thomas]: ^ SyntaxError:無效的語法' –
是的,它似乎不好太。但我從來沒有與'yaml'工作。也許有一種方法是將'yaml'轉換爲'json',然後使用'pd.read_json'來創建'DataFrame'。 – jezrael