使用for循环跨不同的excel工作表添加值,但需要单独的值

2024-05-15 15:51:43 发布

您现在位置:Python中文网/ 问答频道 /正文

您好:)我正在尝试创建一个for循环,以减少代码中的冗余,其中我需要访问excel文件中的许多不同工作表,计算特定值的数量,然后绘制一个图形。 目前,我的for循环代码如下所示:

df = pd.read_excel('C:/Users/julia/OneDrive/Documents/python assignment/2016 data -EU values.xlsx', 
skiprows=6)
sheets_1 = ["PM10 ", "PM2.5", "O3 ", "NO2 ", "BaP", "SO2"]
resultM1 = 0
for sheet in sheets_1:
    print(sheet[0:5])
    for row in df.iterrows():
        if row[1]['Country'] == 'Malta':
            resultM1 += row[1]['AirPollutionLevel']
print(resultM1)

我希望输出像这样: PM10 142 PM2.5 53 O3 21 NO23 BaP 21 二氧化硫32

但我得到的只是一张一张打印出来的纸名,以及所有纸上我需要的SEPCFIC值的总量。即 PM10 PM2.5 臭氧 二号 BaP 二氧化硫 284.913786

我真的需要将这些值分离到各自的表中,而不是加在一起

附件是excel文件的屏幕截图。正如你所看到的,有不同的表和许多值-我需要在每个表中添加特定国家的值。 enter image description here

任何帮助都将不胜感激


Tags: 文件代码indffor数量excelsheet
1条回答
网友
1楼 · 发布于 2024-05-15 15:51:43
import pandas as pd
# Open as Excel object
xls = pd.ExcelFile('C:/Users/julia/OneDrive/Documents/python assignment/2016 data -EU values.xlsx')
# Get sheet names
sheets_1 = xls.sheet_names

# Dictionary of SheetNames:dfOfSheets
sheet_to_df_map = {}
for sheet_name in xls.sheet_names:
    sheet_to_df_map[sheet_name] = xls.parse(sheet_name)

# create list to store results
resultM1 = []
# Loop over keys and df in dictionary
for key, df in sheet_to_df_map.items():
    # remove top 5 blank rows
    df = df = df.iloc[5:]
    # set column names as first row values
    headers = df.iloc[0]
    df  = pd.DataFrame(df.values[1:], columns=headers)
    #loop over rows in the df and create pd series to store Malta results
    results  =df.loc[df['Country'] == "Malta", 'AirPollutionLevel']
    # Loop over the results for Malta from each sheet and append 'Malta' and then append the value to a list
    for i in results:
        resultM1.append(key)
        resultM1.append(i)

# Convert list to df
df = pd.DataFrame(resultM1) 
# Rename column
df = df.rename({0: 'Sheet'}, axis=1)  
# create two columns
final = pd.DataFrame({'Sheet':df['Sheet'].iloc[::2].values, 'Value':df['Sheet'].iloc[1::2].values})

相关问题 更多 >