第1關:將超市銷售excel文件根據(jù)商品的類別篩選存儲
任務描述
本關任務: 超市銷售數(shù)據(jù)如圖所示
建立excel文件“類別銷售”,根據(jù)不同類別建立多個工作表,將相同類別的銷售信息存放在相應的工作表中。
相關知識
為了完成本關任務,你需要掌握:1.讀取excel文件,2.篩選dataframe數(shù)據(jù),3.將數(shù)據(jù)寫入工作簿和工作表
從excel文件讀入數(shù)據(jù)
pd.read_excel(filename,sheet_name=0,header=0,index_col=None,names=None,dtype=None) filename:指定電子表格的具體路徑
sheet_name:指定需要讀取電子表格中的第幾個sheet,既可以傳遞整數(shù)也可以傳遞具體的Sheet名稱
header:是否需要將數(shù)據(jù)集的第一行用作表頭,默認為是需要的
index_col:指定哪些列用作數(shù)據(jù)框的行索引(標簽)
names:如果原數(shù)據(jù)集中沒有字段,可以通過該參數(shù)在數(shù)據(jù)讀取時給數(shù)據(jù)框添加具體的表頭?
dtypes:通過字典的形式,指定某些列需要轉(zhuǎn)換的形式?
向excel文件寫入數(shù)據(jù)
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, encoding=None)
excel_writer : 文件路徑或現(xiàn)有的ExcelWriter
sheet_name :字符串,表的名稱。默認“Sheet1”
na_rep : 字符串,默認‘ ’,缺失數(shù)據(jù)表示方式
float_format : 字符串,默認None。格式化浮點數(shù)的字符串
columns : 列表,要寫入的列 header : 布爾或字符串列表,默認為Ture。如果給定字符串列表,則它是列名。
index :布爾,默認的Ture。行名(索引)
index_label : 字符串或序列,默認為None。 注意:通過ExcelWriter寫入后要同執(zhí)行save()保存。
DataFrame
唯一值函數(shù)
unique()是以數(shù)組形式返回列的所有唯一值
篩選數(shù)據(jù) Pandas的.loc參數(shù)可以對多列數(shù)據(jù)進行篩選,并且支持不同篩選條件邏輯組合。
常用的篩選條件包括等于(==),不等于(!),大于(>),小于(<),大于等于(>=) ,小于等于(<=)等等。邏輯組合包括與(&)和或(|)。
list1=[["張三",'男'],["李四",'女'],["王五",'男'],["趙六",'女']]
import panda as pd
df=pd.DataFrame(list1,columns=["姓名","性別"])
則df
姓名 性別
0 張三 男
1 李四 女
2 王五 男
3 趙六 女
df["性別"].unique()
“男”,"女"
df.loc[df["性別"]=="男"]
姓名 性別
0 張三 男
2 王五 男
編程要求
根據(jù)提示,在右側(cè)編輯器補充代碼,建立excel文件“類別銷售”,根據(jù)不同類別建立多個工作表,將相同類別的銷售信息存放在相應的工作表中。
測試說明
平臺會對你編寫的代碼進行測試: 輸入類別,系統(tǒng)將顯示該類別工作表的日期,商品編碼,商品名稱和合計金額四列信息
測試輸入:調(diào)料
;
預期輸出:文章來源地址http://www.zghlxwxcb.cn/news/detail-764011.html
日期 商品編碼 商品名稱 合計金額
0 2000-05-30 \t090202010048 \t裕榮蝦味先蝦條(原味)80g 7.7
1 2000-06-22 \t090202010071 \t四季寶顆?;ㄉu340g 13.3
2 2000-06-24 \t090202010035 \t牛頭牌雞湯塊66g 7.7
3 2000-07-18 \t090202010024 \t金蘭拌面拌飯醬370g 20.4
測試輸入:電池
;
預期輸出:
日期 商品編碼 商品名稱 合計金額
0 2000-06-14 \t010105010002 \t金霸王7號2粒 5.2
1 2000-06-14 \t010105010005 \t金霸王超能量(m3)7號2粒 6.2
2 2000-07-16 \t010105010007 \t南孚電池7號5粒裝 8.9
代碼內(nèi)容
import pandas as pd
df=pd.read_excel("xlscl/step1/超市銷售數(shù)據(jù).xlsx",dtype={"商品編碼":str,"商品條碼":str})
writer = pd.ExcelWriter("xlscl/step1/類別銷售.xlsx")
#代碼開始
df_ = df["類別"].unique()
for x in df_:
dfdata = df.loc[df["類別"]==x]
dfdata.to_excel(writer, sheet_name=x, index=False)
writer.save()
#代碼結束
第2關:將銀行信息excel文件按地區(qū)篩選存儲
任務描述
本關任務:編寫一個將銀行信息的excel文件篩選存儲的小程序 銀行分布excel文件如圖所示
請編寫程序,在test文件夾下建立excel文件銀行一線城市,將北京市、上海市、廣州市、深圳市的銀行編號、名稱按銀行編號從小到大的順序放置到不同的excel工作表中
提示:可以將城市的名字放入列表
代碼內(nèi)容
import pandas
writer = pandas.ExcelWriter('test/銀行一線城市.xlsx')
data=pandas.read_excel("test/銀行信息.xlsx",dtype={"銀行編號":str})
#代碼開始
dfdata1 = data.loc[data["城市"] == "北京市", ["銀行編號", "名稱"]]
dfdata1 = dfdata1.sort_values("銀行編號")
dfdata1.to_excel(writer, sheet_name="北京市", index=False)
dfdata2 = data.loc[data["城市"] == "上海市", ["銀行編號", "名稱"]]
dfdata2 = dfdata2.sort_values("銀行編號")
dfdata2.to_excel(writer, sheet_name="上海市", index=False)
dfdata3 = data.loc[data["城市"] == "廣州市", ["銀行編號", "名稱"]]
dfdata3 = dfdata3.sort_values("銀行編號")
dfdata3.to_excel(writer, sheet_name="廣州市", index=False)
dfdata4 = data.loc[data["城市"] == "深圳市", ["銀行編號", "名稱"]]
dfdata4 = dfdata4.sort_values("銀行編號")
dfdata4.to_excel(writer, sheet_name="深圳市", index=False)
'''
list_ = ["北京市", "上海市", "廣州市", "深圳市"]
for x in list_:
df = data.loc[data["城市"]==x, ["銀行編號", "名稱"]]
df = df.sort_values("銀行編號")
df.to_excel(writer, sheet_name=x, index=False)
'''
#代碼結束
writer.save()
第3關:將gdpecxcel文件按年份篩選存儲
任務描述
本關任務:編寫一個將GDP信息的excel文件篩選存儲的小程序 各省GDPexcel文件如圖所示
請編寫程序,在test文件夾下建立excel文件GDP分年份,將2000-2016年每年建一個工作表,將該年各省的省份、GDP稱按GDP從大到小的順序放置 注意:工作表的名稱為字符形
DataFrame類型的排序數(shù)據(jù)
pandas中的sort_values()函數(shù),可以將數(shù)據(jù)集依照某個字段中的數(shù)據(jù)進行排序,該函數(shù)即可根據(jù)指定列數(shù)據(jù)也可根據(jù)指定行的數(shù)據(jù)排序。
DataFrame.sort_values(by=”列名”,axis=0,ascending=True,inplace=False)
by:axis軸上的某個索引或索引列表
axis=0按列排序 axis=1按行排序 默認按列
ascending是否按指定列的數(shù)組升序排列,默認為True,即升序排列
inplace是否用排序后的數(shù)據(jù)集替換原來的數(shù)據(jù),默認為False,即不替換
代碼內(nèi)容
import pandas
writer = pandas.ExcelWriter('test/GDP分年份.xlsx')
data=pandas.read_excel("test/各省GDP.xlsx",dtype={"年份":str},)
#代碼開始
for i in range(2000, 2017):
df = data.loc[data["年份"]==str(i),["省份", "GDP"]]
df = df.sort_values(by='GDP', ascending=False)
df.to_excel(writer, sheet_name=str(i), index=False)
#代碼結束
writer.save()
第4關:統(tǒng)計超市銷售excel文件各類別和各日的數(shù)據(jù),并將統(tǒng)計結果存入新的工作簿
任務描述
本關任務: 打開超市銷售數(shù)據(jù)工作簿
使用excel建立一個統(tǒng)計數(shù)據(jù)工作簿,建立一個工作表類別統(tǒng)計,按合計金額降序顯示不同類別銷售金額的和。
建立一個工作表日期統(tǒng)計,按日期升序顯示不同日期銷售金額的和
相關知識
為了完成本關任務,你需要掌握:1.DataFrame如何匯總數(shù)據(jù),2.DataFrame如何排序數(shù)據(jù)。
DataFrame類型的匯總數(shù)據(jù)
Groupby可以根據(jù)一個或多個鍵對DataFrame計算分組摘要統(tǒng)計, 如計數(shù)、求和、平均值、標準差,或用戶自定義函數(shù)。
例如
list1=[["張三",'男'],["李四",'女'],["王五",'男'],["趙六",'女']]
import pandas as pd
df=pd.DataFrame(list1,columns=["姓名","性別"])
則df
姓名 性別
0 張三 男
1 李四 女
2 王五 男
3 趙六 女
df.groupby(["性別"])["姓名"].count()
性別
女 2
男 2
DataFrame.groupby(by=None, axis=0, as_index=True)
by :標簽或標簽列表;用于確定分類的列。
axis : 接收 0/1;用于表示沿行(0)或列(1)分割。
as_index:默認Ture,匯總后會建立一個序列存放匯總的結果。匯總的列是序列的index索引,統(tǒng)計值的列是序列的數(shù)值。
指定為False則匯總結果是一個數(shù)據(jù)集,匯總列和統(tǒng)計值都是列。
序列類型的排序
序列的sort_values()函數(shù),可以將序列依照數(shù)據(jù)進行排序。 series1.sort_values(ascending=True,inplace=False) ascending是否按指定列的數(shù)組升序排列,默認為True,即升序排列 inplace是否用排序后的數(shù)據(jù)集替換原來的數(shù)據(jù),默認為False,即不替換 序列的sort_index()函數(shù),可以將序列依照索引列進行排序
編程要求
根據(jù)提示,在右側(cè)編輯器補充代碼,使用excel建立一個統(tǒng)計數(shù)據(jù)工作簿,建立一個工作表類別統(tǒng)計,按合計金額降序顯示不同類別銷售金額的和。 建立一個工作表日期統(tǒng)計,按日期升序顯示不同日期銷售金額的和
測試說明
平臺會對你編寫的代碼進行測試: 輸出兩個工作類別統(tǒng)計工作表和日期統(tǒng)計工作表的數(shù)據(jù)
代碼內(nèi)容
import pandas as pd
df=pd.read_excel("xlscl/step1/超市銷售數(shù)據(jù).xlsx")
writer = pd.ExcelWriter('xlscl/step2/統(tǒng)計數(shù)據(jù).xlsx')
#代碼開始
df_type = df.groupby(["類別"])["合計金額"].sum()
df_date = df.groupby(["日期"])["合計金額"].sum()
df_type.sort_values(ascending=False, inplace=True)
df_type.to_excel(writer, sheet_name="類別統(tǒng)計")
df_date.to_excel(writer, sheet_name="日期統(tǒng)計")
writer.save()
#代碼結束
第5關:將超市銷售excel文件分別存放在多個日期工作簿的不同類別工作表中
任務描述
本關任務: 超市銷售數(shù)據(jù)如圖所示 在xlscl/step3/rq文件夾下根據(jù)銷售的日期建立不同的excel文件,
將同一類別的銷售信息存放在excel文件的不同工作表中。
并建立類別統(tǒng)計工作表,顯示該日各類別的合計金額的和,按合計金額的降序排列。
編程要求
根據(jù)提示,在右側(cè)編輯器補充代碼。 注意:由于文件名只能是字符形,所以需要將日期型數(shù)據(jù)轉(zhuǎn)換為字符形 可以使用 str(日期時間數(shù)據(jù)).replace('-',"")[:8]
將日期時間的字符的-刪除再取前8個字符 此外,文件需要保存再xlscl的step3文件夾下的rq文件夾下
測試說明
平臺會對你編寫的代碼進行測試:
測試輸入: 20000525 零食
預期輸出:
商品編碼 商品名稱 合計金額
0 90101030095 \t康師傅蘇打夾心香草巧克力餅干96g 4.5
1 90101030100 \t百力滋巧克力味50G 3.6
2 90101070032 \t糙米館蕎麥150g 6.9
3 90101090052 \t益民鹽津楊梅180g 6.9
4 90101090054 \t益民精鹽桃肉160g 6.9
5 90101090055 \t益民咸話梅110g 6.9
6 90101090057 \t益民多味山楂180g 6.9
7 90101090058 \t益達無糖口香糖藍莓味13.5g 1.9
8 90102010035 \t黑塘麥芽餅500g 27.8
9 90103010048 \t渝業(yè)燒烤豆干80g 1.9
10 90103010053 \t金鑼Q香香腸老湯味100g 2.1
類別 合計金額
0 酒 384.0
1 煙 344.5
2 零食 76.3
3 飲料 38.2
4 冷飲 22.0
5 奶制品 15.5
6 方便面 3.5
7 紙制品 2.1
測試輸入: 20000530 煙文章來源:http://www.zghlxwxcb.cn/news/detail-764011.html
預期輸出:
商品編碼 商品名稱 合計金額
0 90501000012 \t黃鶴樓(硬雅香) 40
1 90501000016 \t黃金葉(軟大金圓) 20
2 90501000021 \t南京(紅) 22
類別 合計金額
0 零食 115.1
1 煙 82.0
2 飲料 49.2
3 冷飲 22.5
4 奶制品 9.8
5 調(diào)料 7.7
6 紙制品 6.1
7 方便面 3.5
代碼內(nèi)容
import pandas as pd
df=pd.read_excel("xlscl/step1/超市銷售數(shù)據(jù).xlsx",dtype={"商品編碼":str,"商品條碼":str})
#代碼開始
df_dates = df["日期"].unique() # 日期list
for date in df_dates:
file_name = str(date).replace('-', '')[:8]
writer = pd.ExcelWriter('./xlscl/step3/rq/'+file_name+'.xlsx') # 文件
df_data = df.loc[df["日期"]==date] # date日期內(nèi)數(shù)據(jù)
df_types = df_data["類別"].unique() # date日期內(nèi)的類別list
for type in df_types:
df_type0 = df_data.loc[df["類別"]==type] # 單一類別信息
df_type0.to_excel(writer, sheet_name=type)
df_type1 = df_data.groupby(["類別"])["合計金額"].sum()
df_type1.sort_values(ascending=False, inplace=True)
df_type1.to_excel(writer, sheet_name="類別統(tǒng)計", index_label="類別")
writer.save()
#代碼結束
到了這里,關于頭歌Python實訓——pandas數(shù)據(jù)處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!