hnldyxx551 发表于 2020-3-27 21:13:59

像求助一道让python从excel里提取并且处理文件的问题

我有一个excel文件会显示年月日,降雨量,平均温度和最高,最低温度
DAY        MONTH        YEAR        PRCP        TAVG        TMAX        TMIN
12        3                2018                0        27.9                              25.6
13        3                2018             0        28.2               
14        3             2018              0        28.6                              25.2
excel里的有些数值是不存在的,所以要显示他是null
我要如何写一个程序让我在输入summary(filename, year, c_name)时会显示(num_data, max_data, min_data, sum_data)(一共有几组数据,最高数据,最低数据和数据总和)

>>> summary('Weather.csv', 2018, 'PRCP')
(287, 60.7, 0.0, 1277.0)
>>> summary('Weather.csv', 2019, 'TMIN')
(220, 28.0, 21.9, 5639.0)
>>> summary('Weather.csv', 2019, 'TMAX')
(0, None, None, 0)
>>> summary('Weather.csv', 2020, 'TAVG')
(70, 29.1, 25.6, 1954.7)

excel的文档位置老师已经写好不用改。

Chysial 发表于 2020-3-27 23:09:08

大体是这样,你自己在稍微改改就ok了
import pandas as pd
df = pd.read_excel("C:\\Users\\Chysial\\Desktop\\Weather.xlsx")
#缺失值处理,因为你要求是null在缺失值时候就是None了
def summary(filename="C:\\Users\\Chysial\\Desktop\\Weather.xlsx",year = "2018",c_name="tmin"):
    df = pd.read_excel("C:\\Users\\Chysial\\Desktop\\Weather.xlsx")
    #其实就是一个函数.loc
    dt = df.loc.isin()]
    num_data = dt.shape
    max_data = dt.max()
    min_data = dt.min()
    if dt.sum() ==0:
      sum_data = 'None'
    else:
      sum_data = dt.sum()
    return
print(summary())
if __name__=="__main__":
    summary()
   

hnldyxx551 发表于 2020-3-28 21:07:56

Chysial 发表于 2020-3-27 23:09
大体是这样,你自己在稍微改改就ok了

请问老师说不能用pandas要用Implement Map和Filter该怎么办

Chysial 发表于 2020-3-28 21:18:29

本帖最后由 Chysial 于 2020-3-28 21:25 编辑

hnldyxx551 发表于 2020-3-28 21:07
请问老师说不能用pandas要用Implement Map和Filter该怎么办

那要怎么打开excel啊,不用openpyxl,numpy,pandas?

hnldyxx551 发表于 2020-3-28 21:41:36

Chysial 发表于 2020-3-28 21:18
那要怎么打开excel啊,不用openpyxl,numpy,pandas?

因为我上传作业的网站已经默认打开了csv了。所以我只需要处理数据

hnldyxx551 发表于 2020-3-28 21:44:23

Chysial 发表于 2020-3-28 21:18
那要怎么打开excel啊,不用openpyxl,numpy,pandas?

不好意思麻烦到你了

Chysial 发表于 2020-3-28 22:00:15

hnldyxx551 发表于 2020-3-28 21:41
因为我上传作业的网站已经默认打开了csv了。所以我只需要处理数据

说实话我真没有用过csv可以吧把csv转化成DataFrame,{:5_97:}也是用pandas哈哈 ;
csv_file = "yourfilename.csv"
csv_data = pd.read_csv(csv_file, low_memory = False)#防止弹出警告
csv_df = pd.DataFrame(csv_data)
后面就一样了

Chysial 发表于 2020-3-28 23:05:10

我没有cav文件,你可以把它输出成一个列表,按照我这个方法来from lxml import etree
import openpyxl

def len_column(dt):
    for i in range(1,1000):
      if dt.cell(row = 1, column = i).value == None:
            return i
def len_row(dt):
    for i in range(1,10000):
      if dt.cell(row = i, column =1).value == None:
            return i
def summary(filename = 'C:\\Users\\Chysial\\Desktop\\Weather.xlsx',year='2018',c_name='tmin'):
    df = openpyxl.load_workbook(filename)
    dt = df['Sheet1']
    title = []
    for i in range(1,len_column(dt)):
      title.append(dt.cell(1,i).value)
    j =0
    list_c_name = []
    for i in range(len(title)):
      if title == c_name:
            c_name_num = i
    for i in range(2, len_row(dt)):
      if dt.cell(row = i,column = 3).value == int(year):
            j += 1
      list_c_name.append(dt.cell(row = i,column = c_name_num + 1).value)
    list_c_name.remove(None)
    if list_c_name:
      max_num = max(list_c_name)
      min_num = min(list_c_name)
      sum_num = sum(list_c_name)
    else:
      max_num = 'None'
      min_num = 'None'
      sum_num = 'None'
      
    returnj,max_num,min_num,sum_num


print(summary())


#我没有cav文件,我可以用openpyxl写个大概意思,你把cav用read变成一个大的列表,列表的值对应openpyxl的value就行了

hnldyxx551 发表于 2020-3-29 15:56:33

Chysial 发表于 2020-3-28 23:05
我没有cav文件,你可以把它输出成一个列表,按照我这个方法来

我发现还是不行

hnldyxx551 发表于 2020-3-29 16:03:27

我的是这样子的
def summary(filename, year, c_name)
    weather_data=read_csv(file name)
    summary_data=()
    row_data=[]
   
    num_data=int(year)
    max_data=max(float(c_name))
    min_data=min(float(c_name))
    sum_data=sum(float(c_name))
   
    if num_data==0
      max_data==none
      min_data==nine
      sum_data==0
      
      return row_data.append()
    else:
      return row_data.append()
   
    summary_data.qppend(row.data)
    return round(summary_data,dp)
页: [1]
查看完整版本: 像求助一道让python从excel里提取并且处理文件的问题