2016-03-29 10 views
0

Моя цель - в конечном итоге создать график рассеяния с датой на оси x и выиграть делегаты (каждого кандидата) по оси y. Я не уверен, как «заполнить пробелы», когда дело доходит до отсутствующих дат. Я прикрепил картину таблицы, которую я получил.Python/Pandas Dataframe: автоматически заполнять недостающие строки

Например, я пытаюсь поставить 1 марта дату для Аляски, Арканзаса и т. Д., Чтобы сделать возможным построение данных.

# CREATE DATAFRAME WITH DELEGATE WON/TARGET INFORMATION 

import requests 
from lxml import html 
import pandas 

url = "http://projects.fivethirtyeight.com/election-2016/delegate-targets/" 
response = requests.get(url) 
doc = html.fromstring(response.text) 

tables = doc.findall('.//table[@class="delegates desktop"]') 
election = tables[0] 
election_rows = election.findall('.//tr') 
def extractCells(row, isHeader=False): 
    if isHeader: 
     cells = row.findall('.//th') 
    else: 
     cells = row.findall('.//td') 
    return [val.text_content() for val in cells] 


def parse_options_data(table): 

    rows = table.findall(".//tr") 
    header = extractCells(rows[1], isHeader=True) 
    data = [extractCells(row, isHeader=False) for row in rows[2:]] 

    trumpdata = "Trump Won Delegates" 
    cruzdata = "Cruz Won Delegates" 
    kasichdata = "Kasich Won Delegates" 

    data = pandas.DataFrame(data, columns=["Date", "State or Territory", "Total Delegates", trumpdata, cruzdata, kasichdata, "Rubio"]) 

    data.insert(4, "Trump Target Delegates", data[trumpdata].str.extract(r'(\d{0,3}$)')) 
    data.insert(6, "Cruz Target Delegates", data[cruzdata].str.extract(r'(\d{0,3}$)')) 
    data.insert(8, "Kasich Target Delegates", data[kasichdata].str.extract(r'(\d{0,3}$)')) 

    data = data.drop('Rubio', 1) 
    data[trumpdata] = data[trumpdata].str.extract(r'(^\d{0,3})') 
    data[cruzdata] = data[cruzdata].str.extract(r'(^\d{0,3})') 
    data[kasichdata] = data[kasichdata].str.extract(r'(^\d{0,3})') 

    return df 

election_data = parse_options_data(election) 
df = pandas.DataFrame(election_data) 
df 

Picture of my table

+0

Просто для уточнения, как вы знаете, какие значения заполнить пробелы? То есть, как вы узнали бы, что «1 марта» является правильной величиной для ввода полей даты для Аляски, Арканзаса и т. Д.? Или, дала бы всякая дата, если она не пуста (и, возможно, не меньше существующих значений)? – David

+0

Привет! В идеале я бы использовал форвардную заливку (?), Чтобы заполнить все пробелы после 1 марта (но до следующей даты) с 1 марта. Таким образом, было бы 7 строк 1 марта, а затем 5 строк 12 марта, а не просто одна строка каждой даты. Надеюсь, это имеет смысл и спасибо! – Lucy

ответ

Смежные вопросы