2017-02-04 5 views
-3

Загрузите данные энергии из файла Energy Indicators.xls, который является списком показателей энергоснабжения и производства возобновляемой электроэнергии от Организации Объединенных Наций на 2013 год и должен быть помещен в DataFrame с переменным названием энергии.Как загрузить лист excel и очистить данные в python?

Имейте в виду, что это файл Excel, а не файл значений, разделенный запятыми. Кроме того, не забудьте исключить информацию нижнего колонтитула и заголовка из файла данных. Первые два столбца не являются ненужными, поэтому вам следует избавиться от них, и вы должны изменить метки столбцов, чтобы столбцы были такими:

['Страна', 'Энергоснабжение', 'Энергоснабжение на душу населения', ' % Renewable '] Преобразование энергоснабжения в гигаджоули (в петаджуле есть 1 000 000 гигаджулей). Для всех стран, у которых отсутствуют данные (например, данные с «...»), убедитесь, что это отражено как значения np.NaN.

Переименуйте следующий список стран (для использования в последующих вопросах): «Республика Корея»: «Южная Корея», «Соединенные Штаты Америки»: «Соединенные Штаты», «Соединенное Королевство Великобритании и Северной Ирландии »:« Соединенное Королевство », « Китай, Специальный административный район Гонконг »:« Гонконг »

Есть также несколько стран с номерами и/или скобками на их имя. Обязательно удалите их, , например. «Боливия (многонациональное государство)» должна быть «Боливия», «Швейцария17» должна быть «Швейцария».

Затем загрузите данные ВВП из файла world_bank.csv, который представляет собой ВВП csv, содержащий страны с 1960 по 2015 год от Всемирного банка. Назовите этот ВВП DataFrame. Обязательно пропустите заголовок и переименуйте следующий список стран: «Корея, Республика»: «Южная Корея», «Иран, Исламская Республика»: «Иран», «Гонконгская САР, Китай» : «Гонконг»

Наконец, загрузите данные Sciamgo Journal и Country Rank для Energy Engineering and Power Technology из файла scimagojr-3.xlsx, который оценивает страны на основе их вклада в журнал в вышеупомянутой области. Вызовите этот ScimEn DataFrame.

Присоединитесь к трем наборам данных: GDP, Energy и ScimEn в новый набор данных (используя пересечение названий стран). Используйте только последние 10 лет (2006-2015 гг.) Данных о ВВП и только 15 лучших стран по Scramagojr 'Rank' (Rank 1 to 15).

Индекс этого DataFrame должен быть названием страны, а столбцы должны быть ['Rank', 'Documents', 'Citable documents', 'Citations', 'Self-citations', 'Цитаты на документ «Индекс», «Энергоснабжение», «Энергоснабжение на душу населения», «% возобновляемых», «2006», «2007», «2008», «2009», «2010», «2011», «2012» ',' 2013 ',' 2014 ',' 2015 '].

Эта функция должна возвращать DataFrame с 20 столбцами и 15 элементами.

Я попытался следующий код на этот вопрос, но она возвращается только 12 строк вместо 15:

import pandas as pd 

from pandas import ExcelWriter 

from pandas import ExcelFile 

pd.set_option('display.max_columns', None) 

pd.set_option('display.max_rows', None) 

Energy = pd.read_excel('Energy Indicators.xls') 

Energy.drop(Energy.columns[[0,1]],axis=1,inplace=True) 

Energy.columns=['Country','Energy Supply','Energy Supply per capita','% Renewable'] 

Energy['Energy Supply']*=1000000 

Energy['Country'] = Energy['Country'].str.replace(r"\(.*\)","") 

Energy['Country'] = Energy['Country'].str.replace("[0-9()]+$", "") 

Energy.replace('Republic of Korea','South Korea', inplace = True) 

Energy.replace('United States of America','United States', inplace = True) 

Energy.replace('United Kingdom of Great Britain and Northern Ireland','United Kingdom', inplace = True) 

Energy.replace('China, Hong Kong Special Administrative Region','Hong Kong', inplace = True) 

import pandas as pd 

GDP = pd.read_csv('world_bank.csv', index_col=0, header=None) 

GDP = GDP.drop(['Data Source']) 

GDP = GDP.dropna() 

GDP = GDP.reset_index() 

GDP.columns = GDP.iloc[0] 

GDP.drop(GDP.index[[0,3]], inplace=True) 

GDP = GDP.rename(columns={'Country Name': 'Country'}) 

GDP.replace(',','-', inplace=True) 

GDP = GDP.replace('Korea, Rep.','South Korea') 

GDP = GDP.replace('Iran, Islamic Rep.','Iran') 

GDP = GDP.replace('Hong Kong SAR, China','Hong Kong') 


import pandas as pd 

from pandas import ExcelWriter 

from pandas import ExcelFile 

pd.set_option('display.max_columns', None) 

pd.set_option('display.max_rows', None) 

ScimEn = pd.read_excel('scimagojr-3.xlsx') 


b = pd.merge(pd.merge(Energy,GDP,on='Country'),ScimEn,on='Country') 

a = pd.merge(pd.merge(Energy,GDP,on='Country'),ScimEn,on='Country') 

a = a.sort(['Rank'], ascending=[True]) 

a = a[a["Rank"] < 16] 

a=a.rename(columns = {'2006.0':'abc'}) 

a.columns.values[53] = "2006" 

a.columns.values[54] = "2007" 

a.columns.values[55] = "2008" 

a.columns.values[56] = "2009" 

a.columns.values[57] = "2010" 

a.columns.values[58] = "2011" 

a.columns.values[59] = "2012" 

a.columns.values[60] = "2013" 

a.columns.values[61] = "2014" 

a.columns.values[62] = "2015" 


a = a[['Country','Rank', 'Documents', 'Citable documents', 'Citations', 'Self-citations', 'Citations per document', 'H index', 'Energy Supply', 'Energy Supply per capita', '% Renewable', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015']] 


a = a.set_index('Country') 


def ans(): 

    return a 

ans() 
+3

один вопрос за один раз. Сбрасывание всех ваших запросов в одном quesiton дает читаемость. Улучши это. Прочитайте [ask] и создайте [mcve]. – MYGz

ответ

0

Пожалуйста, задайте свой вопрос один за другим. Тем не менее, я придумал решение некоторых из вопросов, которые вы задали выше. Вы можете загрузить файл excel с помощью ex = pd.ExcelFile('Yourfilename.xls'), а затем проверить имя своего листа в файле Excel с помощью ex.sheet_name. рядом вы можете использовать следующий читать этот лист у вас есть в файле Excel,

en = ex.parse('sheetname', skiprows = 2, skip_footer =True,..) 

тогда, вы можете заменить специальные символы, используя следующий синтаксис

en.replace('$%^',np.NaN, inplace =True) 

теперь вы можете проверить свои dataframe-х заголовок и посмотреть, а затем проверить, сколько строк вам еще нужно пропустить и другие детали.

падать колонны, то вы можете использовать следующий синтаксис

en.drop([dol for col in ['colname1', 'colname2', ...] if col in en], axis =1, inplace =True) 

Это он сейчас с большим вопросом. Работайте над этим, и если это делает то, что вы хотите, сделайте так, чтобы ответы на части прочитали файл excel, пропустили строки, заменили NaN и пропустили столбцы.

-1
def answer_one(): 
    import pandas as pd 
    energy=pd.read_excel('Energy Indicators.xls', skiprows=2) 
    energy.columns=['a','b','Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable'] 
    del energy['a'] 
    del energy['b'] 
    energy['Energy Supply']*=1000000 
    energy['Country'] = energy['Country'].str.replace(r"\(.*\)","") 
    energy['Country'] = energy['Country'].str.replace("[0-9()]+$", "") 
    energy.replace('Republic of Korea','South Korea', inplace = True) 
    energy.replace('United States of America','United States', inplace = True) 
    energy.replace('United Kingdom of Great Britain and Northern Ireland','United Kingdom', inplace = True) 
    energy.replace('China, Hong Kong Special Administrative Region','Hong Kong', inplace = True) 
    GDP=pd.read_csv('world_bank.csv',skiprows=4) 
    GDP.replace('Korea, Rep.','South Korea') 
    GDP.replace('Iran, Islamic Rep.','Iran') 
    GDP.replace('Hong Kong SAR, China' , 'Hong Kong') 
    ScimEn=pd.read_excel('scimagojr-3.xlsx') 
    GDP.columns=['Country', 'Country Code', 'Indicator Name', 'Indicator Code', 
     '1960', '1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968', 
     '1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977', 
     '1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986', 
     '1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', 
     '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', 
     '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', 
     '2014', '2015'] 
    for i in ['1960', '1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968', 
     '1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977', 
     '1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986', 
     '1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', 
     '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', 
     '2005']: 
     del GDP[i] 
    ScimEn=ScimEn[ScimEn['Rank']<16] 
    x=pd.merge(GDP,ScimEn,how='inner',left_on='Country',right_on='Country') 
    y=pd.merge(x,energy,how='inner',left_on='Country',right_on='Country') 
    y=y.set_index('Country') 
    del y['Country Code'] 
    del y['Indicator Name'] 
    del y['Indicator Code'] 
    return y 

answer_one() 
0
import numpy as np 
import pandas as pd 


def energy(): 
    energy=pd.ExcelFile('Energy Indicators.xls').parse('Energy') 
    energy=energy.iloc[16:243][['Environmental Indicators: Energy','Unnamed: 3','Unnamed: 4','Unnamed: 5']].copy() 
    energy.columns=['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable'] 

    energy = energy.replace('...', np.nan) 
    energy['Energy Supply']=energy['Energy Supply']*1000000 

    energy = energy.replace("Republic of Korea", "South Korea") 
    energy = energy.replace("United States of America", "United States") 
    energy = energy.replace("United Kingdom of Great Britain and Northern Ireland","United Kingdom") 
    energy = energy.replace("China, Hong Kong Special Administrative Region", "Hong Kong") 

    energy['Country'] = energy['Country'].str.extract('(^[a-zA-Z\s]+)', expand=False).str.strip() 

    energy=energy.reset_index() 
    energy=energy[['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']] 
    return energy.iloc[43] 

def GDP(): 
    GDP=pd.read_csv('world_bank.csv') 
    s=(GDP.iloc[3].values)[:4].astype(str).tolist()+(GDP.iloc[3].values)[4:].astype(int).astype(str).tolist() 
    GDP=GDP.iloc[4:] 
    GDP.columns=s 
    GDP=GDP[['Country Name','2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015']] 
    GDP.columns=['Country','2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015'] 
    GDP=GDP.replace("Korea, Rep.", "South Korea",regex=False) 

    GDP=GDP.replace("Iran, Islamic Rep.","Iran") 

    GDP=GDP.replace("Hong Kong SAR, China","Hong Kong",regex=False) 
    return GDP 

def ScimEn(): 
    ScimEn=pd.ExcelFile('scimagojr-3.xlsx').parse('Sheet1') 

    return ScimEn 

def result(): 
    e= energy() 
    G=GDP() 
    S=ScimEn() 
    tdf=pd.merge(e,G,on='Country') 
    tdf=pd.merge(tdf,S,on='Country') 
    res=tdf[tdf['Rank']<16] 
    res=res.set_index('Country', inplace=False) 
    return res 
Смежные вопросы