python对excel操作简书_Python实现EXCEL常用操作——pandas简介
知乎的代碼塊太丑了,這里的內容就更新到簡書了Python實現EXCEL常用操作——pandas簡介?www.jianshu.com
EXCEL是日常辦公最常用的軟件,然而遇到數據量特別大(超過10W條)或者需要很復雜的公式時就顯得沒那么方便了(卡卡卡),我也是被EXCEL折磨了很多次以后才決定學習Python,從此便一發不可收拾,深深的理解了那句話“Life is short, you need Python”,下面就總結一些python替代EXCEL的常用操作,方便大家學習,當然咯,EXCLE的功能特別多,所以帖子會持續更新。。。
本例數據集采用某地森林大火數據,共有13個特征,X和Y代表地理位置,month代表月份,day代表星期幾,FFMC代表細小可燃物濕度碼,DMC代表粗腐殖質濕度碼,DC代表干旱碼,ISI代表初始蔓延指數,temp代表溫度,RH代表相對濕度,wind代表風速,rain代表降雨量,area代表地區,文件稍后會上傳到百度云
一、打開文件
#導入相關庫
import pandas as pd
import numpy as np
import os
from pandas import DataFrame,Series
import re
1)源文件有列名
df =pd.read_csv(r'E:\work\daima\python\forestfires.csv') #打開文件
2)若源文件沒有列名
df=pd.read_csv(r'E:\work\daima\python\forestfires.csv',header=None)#分配默認的列名
df=pd.read_csv(r'E:\work\daima\python\forestfires.csv' ,sep=',',
names=['X', 'Y', 'month', 'day', 'FFMC', 'DMC', 'DC',
'ISI', 'temp', 'RH','wind', 'rain', 'area']) #自定義列名
3)讀取文件某幾列
df=pd.read_csv(r'E:\work\daima\python\forestfires.csv',nrows=5) #只讀前5行
df=pd.read_csv(r'E:\work\daima\python\forestfires.csv',skiprows=[0,2,3]) #跳過第0,2,3行讀取文件
二、數據基本處理
1)對列進行操作
print(df.columns) #查看列名
print(df.dtypes) #查看各列數據類型
print(df.head(20)) #查看前20行數據
df=df.loc[:,'FFMC':'rain'] #選擇FFMC到rain列所有數據
df=df['new']=1.5 #增加新列并賦值1.5
df=df.drop(['wind', 'rain', 'area'],axis=1) #刪除wind,rain和area三列
2)缺失值處理
df[df.isnull().values==True] #顯示有缺失值的行
df['month'][df.month.isnull()]='U0' #month缺失值填充為U0
df['DC'][df.DC.isnull()]=df['DC'].median() #DC列缺失值填充為DC列的中位數
df.dropna()#刪除含有缺失值的行
df.dropna(how='all')#只丟棄全為NA的那些行
3)計算某列變量頻數
print(df['month'].unique()) #輸出month列唯一值
print(df['month'].value_counts()) #輸出month列各變量出現頻數
4)移除重復數據
df_new=df.drop_duplicates(['month','day']) #移除month和day列包含重復值得行,保留第一個
df_new=df.drop_duplicates(['month'],take_last=True )#移除month列包含重復值得行,保留最后一個
三、篩選
1)條件篩選loc
df_sel=df.loc[(df['month']=='aug') & (df['DC']>=600)] #篩選month列等于aug且DC列大于600的所有行
2)篩選并給新列賦值
這個多用于區間匹配,例如如果A列(0,100],C列為50;A列大于100 ,C列為A列的值
df.loc[(df['DC']>0) & (df['DC']<=100) ,'DC_na']=50 # 創建新列DC_na,DC列大于0且小于等于100,DC列為50
df.loc[df['DC']>100,'DC_na']=df['DC']# 創建新列DC_na,DC列大于100等于原值,其他為NA
3)模糊篩選/精確篩選:isin(),contains()
df_sel1=df[df['day'].str.contains('fr')] # 篩選day列包含fr字符的行
df_sel2=df[df['day'].isin(['fri','mon'])] # 篩選day列等于fri或mon的行
四、提取字符或數字
這個情況很多,涉及到很多正則表達式知識,今后會持續補充
df['xin']='U34' #增加新列,列名為xin,為新列賦值U34
df['zimu']=df['xin'].map(lambda s:re.compile("([0-9]+)").search(s).group())#提取數字
df['shuzi']=df['xin'].map(lambda s:re.compile("[a-zA-Z]+").search(s).group()[0])#提取字母
五、匹配
比如有以下兩個數據集
df1 客戶信息表customer_idsexcity
10084 男北京
10085 女上海
10086 男廣州
10087 女深圳
df2訂單表ordercustomer_idproductshouru
CH000110086 A 500
CH000210086 B 200
CH000310085 C 1000
CH000410084 D 3000
1)左關聯
df_merge=pd.merge(df1,df2,on='customer_id',how='left') #左關聯
print(df_merge)
注意第三四列,與EXCEL匹配的邏輯稍有不同
2)根據多列進行左關聯
這個暫時不舉例了,遇到這種情況再說
pd.merge(df1,df2,on=['key1','key2'],how='left')#多鍵連接
六、聚合(數據透視表)
類似于數據透視表
類似于sumifs(),countifs(),averageifs()等函數的效果
1)聚合groupby()
df_group=df['DC'].groupby([df['month'],df['day']]) #根據month和day列對DC列進行聚合
df_fun=df_gorup.agg(['sum','mean','std']) #對df_group求和,均值和標準差
print(df_fun)
2)數據透視表pd.pivot_table()
這個函數比較難記,可以參考EXCEL數據透視表去理解,index代表列,columns代表行,values代表值,aggfunc代表要對值用什么函數,fil_value代表缺失值用0填充
df_toushi=pd.pivot_table(df,index=['month'],columns=['day'],
values=['DC'],aggfunc=[np.sum,np.mean],fill_value=0)
print(df_toushi)
七、排序
按照DMC列降序,DC列升序對數據集進行排序
df_paixu=df.sort_values(by=['DMC','DC'],ascending=[0,1])
八、時間序列處理
注:源數據沒有時間字段,本例進攻參考
csv中的時間會被讀取為字符串,需要批量處理為pandas可處理的時間類型
df['date']=pd.to_datetime(df['createTime']) #批量轉換createTime中的時間,并賦值到date列
df[(df['date']>='20140701')&(df['date']<='20140715')]#篩選指定時間段數據
總結
以上是生活随笔為你收集整理的python对excel操作简书_Python实现EXCEL常用操作——pandas简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ajax请求_重复的ajax请求让人很受
- 下一篇: java执行sql文件_面试官:MyBa