2013-03-30 13 views
9

, sen burada Nasıl Wikipedia wikitable Python Pandas DataFrame dönüştürülebilir? Wikipedia ise

Ben böyle verileri almak için bir yol arıyorum bir wikitable

{| class="wikitable sortable" 
|- 
! Model !! Mhash/s !! Mhash/J !! Watts !! Clock !! SP !! Comment 
|- 
| ION || 1.8 || 0.067 || 27 || || 16 || poclbm; power consumption incl. CPU 
|- 
| 8200 mGPU || 1.2 || || || 1200 || 16 || 128 MB shared memory, "poclbm -w 128 -f 0" 
|- 
| 8400 GS || 2.3 || || || || || "poclbm -w 128" 
|- 
|} 

bir örneğidir ..., filtre sıralanabilir bazı ilginç veriler bulabilirsiniz Python Pandalar DataFrame

+0

: http://pandas.pydata.org/pandas-docs/dev/dsintro.html#dataframe bir DataFrame bu birinden yapılabilir: Dict 1D ndarrays, liste, dicts veya Seriler; 2-D numpy.ndarray; Yapılandırılmış veya kayıt ndarray; A Serisi; Başka bir DataFrame. En basit olanı bir liste/dict ifadesidir, ancak verilerinizin bu şekilde nasıl zorlanacağı belli değildir. Aklında ne var? – hughdbrown

cevap

12

İşte ayıklamak için py-wikimarkup ve PyQuery kullanarak bir çözüm tüm tablolar, bir wikimarkup dizesinden pandas DataFrames olarak, tablo dışı içeriği göz ardı ederek. Aşağıdaki giriş Verilen

import wikimarkup 
import pandas as pd 
from pyquery import PyQuery 

def get_tables(wiki): 
    html = PyQuery(wikimarkup.parse(wiki)) 
    frames = [] 
    for table in html('table'): 
     data = [[x.text.strip() for x in row] 
       for row in table.getchildren()] 
     df = pd.DataFrame(data[1:], columns=data[0]) 
     frames.append(df) 
    return frames 

,

wiki = """ 
=Title= 

Description. 

{| class="wikitable sortable" 
|- 
! Model !! Mhash/s !! Mhash/J !! Watts !! Clock !! SP !! Comment 
|- 
| ION || 1.8 || 0.067 || 27 || || 16 || poclbm; power consumption incl. CPU 
|- 
| 8200 mGPU || 1.2 || || || 1200 || 16 || 128 MB shared memory, "poclbm -w 128 -f 0" 
|- 
| 8400 GS || 2.3 || || || || || "poclbm -w 128" 
|- 
|} 

{| class="wikitable sortable" 
|- 
! A !! B !! C 
|- 
| 0 
| 1 
| 2 
|- 
| 3 
| 4 
| 5 
|} 
""" 

get_tables aşağıdaki DataFrames döndürür. Buna göre

 Model Mhash/s Mhash/J Watts Clock SP          Comment 
0  ION  1.8 0.067 27  16  poclbm; power consumption incl. CPU 
1 8200 mGPU  1.2    1200 16 128 MB shared memory, "poclbm -w 128 -f 0" 
2 8400 GS  2.3              "poclbm -w 128" 

 

A B C 
0 0 1 2 
1 3 4 5 
1

Düzenlendi - aşağıdaki eksiksiz cevap. Panda'nın yüklü olmaması, eğer bu sizin için işe yararsa bana bildirin.

from pandas import * 

wikitable = ''' 
{| class="wikitable sortable" 
|- 
! Model !! Mhash/s !! Mhash/J !! Watts !! Clock !! SP !! Comment 
|- 
| ION || 1.8 || 0.067 || 27 || || 16 || poclbm; power consumption incl. CPU 
|- 
| 8200 mGPU || 1.2 || || || 1200 || 16 || 128 MB shared memory, "poclbm -w 128 -f 0" 
|- 
| 8400 GS || 2.3 || || || || || "poclbm -w 128" 
|- 
|}''' 
rows = wikitable.split('|-') 
header = [] 
table = [] 
for i in rows: 
    line = i.strip() 
    if line.startswith('!'): 
     header = line.split('!!') 
    elif line.startswith('|') and line.strip() != '|}': 
     table.append(line[2:].split('||')) 

data = {} 
for i in range(len(header) - 1): 
    col = [] 
    for row in table: 
     col.append(row[i]) 
    data[header[i]] = col 

print(data) 

df = DataFrame(data) 
+1

Tamam, sadece Panda belgelerine baktım (önce bunu yapmalıydım) ve tam olarak neye ihtiyacınız olduğunu görüyorum. Bana beş dakika ver ve mükemmel bir örneğim olacak. – pycoder112358

2

Kullanım re bazı ön işlem yapmak ve sonra dönüştürmek için read_csv kullanmak için bir DataFrame:

table = """{| class="wikitable sortable" 
|- 
! Model !! Mhash/s !! Mhash/J !! Watts !! Clock !! SP !! Comment 
|- 
| ION || 1.8 || 0.067 || 27 || || 16 || poclbm; power consumption incl. CPU 
|- 
| 8200 mGPU || 1.2 || || || 1200 || 16 || 128 MB shared memory, "poclbm -w 128 -f 0" 
|- 
| 8400 GS || 2.3 || || || || || "poclbm -w 128" 
|- 
|}""" 

data = StringIO(re.sub("^\|.|^!.", "", table.replace("|-\n", ""), flags=re.MULTILINE)) 
df = pd.read_csv(data, delimiter="\|\||!!", skiprows=1) 

çıkışı:

 Model Mhash/s Mhash/J Watts Clock SP          Comment 
0  ION   1.8 0.067  27   16   poclbm; power consumption incl. CPU 
1 8200 mGPU   1.2      1200 16 128 MB shared memory, "poclbm -w 128 -f 0" 
2 8400 GS   2.3                "poclbm -w 128"