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