2013-03-30 7 views
9

विकिपीडिया में, आप कुछ दिलचस्प डेटा पा सकते हैं, हल हो के लिए फ़िल्टर, ...कैसे अजगर पांडा DataFrame के लिए विकिपीडिया विकिटेबल कन्वर्ट करने के लिए?

यहाँ एक विकिटेबल

{| 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" 
|- 
|} 

का एक नमूना मैं करने के लिए इस तरह के डेटा आयात करने के लिए एक रास्ता तलाश कर रहा हूँ है एक अजगर पांडा DataFrame

+0

इस के अनुसार: http://pandas.pydata.org/pandas-docs/dev/dsintro.html#dataframe एक DataFrame इनमें से किसी एक का निर्माण किया जा सकता है: Dict 1 डी ndarrays, सूचियों, dicts, या श्रृंखला के; 2-डी numpy.ndarray; संरचित या रिकॉर्ड ndarray; ए श्रृंखला; एक और डेटाफ्रेम। सबसे सरल सूची/निर्देश का एक नियम है, लेकिन यह स्पष्ट नहीं है कि आपके डेटा को इस तरह से कैसे जोड़ा जा सकता है। आपके दिमाग में क्या है? – hughdbrown

उत्तर

12

यहाँ एक समाधान py-wikimarkup और PyQuery का उपयोग कर निकालने के लिए है गैर-टेबल सामग्री को अनदेखा करते हुए, wikimarkup स्ट्रिंग से pandas डेटाफ्रेम के रूप में सभी टेबल।

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 से ये DataFrames।

 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

संपादित - नीचे पूरा जवाब। मेरे पास पांडा स्थापित नहीं है, तो मुझे बताएं कि यह आपके लिए काम करता है या नहीं।

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

ठीक है, मैंने सिर्फ पांडा दस्तावेज़ों को देखा (इसे पहले किया जाना चाहिए था), और मुझे लगता है कि आपको अभी क्या चाहिए। मुझे पांच मिनट दें और मेरे पास एक आदर्श उदाहरण होगा। – pycoder112358

2

उपयोग re कुछ preprocess करने के लिए, और फिर read_csv का उपयोग यह कन्वर्ट करने के लिए एक 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) 

उत्पादन:

 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" 
संबंधित मुद्दे