pandas常用技巧匯總

寫在前面

這篇文章沒有任何理論,只是記錄一些可能用得上的技巧

參考:https://zhuanlan.zhihu.com/p/90925476

1导街、讀取數(shù)據(jù)

read_csv參數(shù)解釋

import pandas as pd
df = pd.read_csv("1.csv", header=0)

2术浪、保存數(shù)據(jù)

指定編碼格式楔脯,不然容易出現(xiàn)中文亂碼
index=None:去掉索引

df.to_csv("filename.csv", encoding="utf_8_sig", index=None)

3忙芒、刪除某一列/某一行【索引為0的行】

inplace: 默認(rèn)為False,不修改原數(shù)據(jù)损拢, 返回一個新數(shù)據(jù),如果設(shè)置為True撒犀,則是修改原數(shù)據(jù)

df.drop(['列名'],axis=1,inplace=True)
df.drop(index=0,inplace=True)

4福压、連接多個dataframe

事先存在df1、df2或舞、df3三個dataframe
指定axis=0表示列連接荆姆,axis=1,行連接

df = pd.concat([df1,df2,df3],axis=0)

5映凳、取出指定列的數(shù)據(jù)

subData = df[['col1','col2','col3']]

6胆筒、將字符串轉(zhuǎn)為浮點型或者整型

景:我拿到了一些銷售數(shù)據(jù),其中包含銷售金額诈豌,和門店價格仆救,但是數(shù)據(jù)是字符串形式的【標(biāo)準(zhǔn)的金額展示形式1,234.00 中間會有逗號分隔】

df['售價'] = df['售價'].str.replace(",","").astype(float)

7、分組->dataframe

參考:https://zhuanlan.zhihu.com/p/101284491
場景:統(tǒng)計公司下有多少分店及其銷售額矫渔,分店存在重復(fù)的【因為存在貨類字段彤蔽,導(dǎo)致不同貨類也會出現(xiàn)相同分店,所以出現(xiàn)分店重復(fù)】

  • reset_index():重置索引
  • 聚合之后未使用reset_index()
pgroup.agg({'售價':'sum'})

使用reset_index

pgroup.agg({'售價':'sum'}).reset_index()

這樣之后就可以再在這基礎(chǔ)上進(jìn)行分組分析庙洼,最終得到如下代碼

group = df.groupby(['分店所屬公司','分店名']) # 這里我是用兩列來做分組顿痪,根據(jù)自己的實際需求來實現(xiàn)
res = group.agg({'售價':'sum'}).reset_index().group("分店所屬公司").agg({'分店名':'count','售價':'sum'}).reset_index()
res.rename(columns={'分店所屬公司':'公司', '分店名':'門店數(shù)', '售價':'銷售額'}, inplace = True) # 替換列名
res

8镊辕、按條件提取

df = df[df['discount']<0.9]

可視化基礎(chǔ)參考:https://zhuanlan.zhihu.com/p/35816296

9、解決可視化中文亂碼問題

from pylab import mpl

#mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']    # 指定默認(rèn)字體:解決plot不能顯示中文問題
mpl.rcParams['axes.unicode_minus'] = False           # 解決保存圖像是負(fù)號'-'顯示為方塊的問題

10员魏、修改列名

df.rename(columns={'old_col1':'new_col1', 'old_col2':'new_col2', 'old_col3':'new_col3'}, inplace = True)

11、根據(jù)時間按周分組

參考:https://blog.csdn.net/weixin_26711425/article/details/109069732

# 因為在這里時間是字符串叠聋,所以需要先轉(zhuǎn)換一下
dt["操作時間"] = pd.to_datetime(dt["操作時間"])
# 按周分組撕阎,下邊這種操作是從已有日期中從周一開始,默認(rèn)W是從周末開始【所以會導(dǎo)致碌补,如果日期開始時間不是周一或者周末的虏束,將導(dǎo)致無法選中】。
dtGroup = dt.groupby([pd.Grouper(key='操作時間', freq='W-MON')])

12厦章、數(shù)據(jù)處理镇匀,去除空格

df.replace('\s+','',regex=True,inplace=True) 

13、讀取分組數(shù)據(jù)

fg = df.groupby(['col1','col2',...])
for i, (group, dataframe) in enumerate(fg):
    print(group)

14袜啃、按指定條件替換數(shù)據(jù)

df.loc[df['分店']==0]="63998"

15汗侵、查看數(shù)據(jù)是否有nan等

# 查看每一列是否有NaN:
df.isnull().any(axis=0)
# 查看每一行是否有NaN:
df.isnull().any(axis=1)

# 查看所有數(shù)據(jù)中是否有NaN最快的:
df.isnull().values.any()

16、替換nan群发、inf

df.replace(np.nan, 0, inplace=True)
df.replace(np.inf, 0, inplace=True)

17晰韵、數(shù)據(jù)合并

參考:https://blog.csdn.net/qq_41853758/article/details/83280104

# df,right是分別兩個dataframe,on:是指通過這兩個dataframe中的哪個字段來連接熟妓,可以是多個字段
res = pd.merge(df, right, how='left', on="分店")

18雪猪、分組去重統(tǒng)計

group = df.groupby('col1')
group.agg({"col2":"count", "col3":pd.Series.nunique})

實例

# 加盟商數(shù)據(jù)文件 2020.csv
fc = pd.read_csv("franchise2020.csv",header=0)
fc1 = fc[['所屬公司','區(qū)域名稱','分店全稱']]
fc1 = fc1.drop_duplicates(keep='first')
fcG = fc1.groupby('所屬公司')
fcG.agg({"區(qū)域名稱": pd.Series.nunique, "分店全稱": pd.Series.nunique}).reset_index().to_csv("test.csv",encoding="utf-8-sig",index=None)

19、df.drop_duplicates去重

drop_duplicates(subset=['A','B'],keep='first',inplace=True)
代碼中subset對應(yīng)的值是列名起愈,表示只考慮這兩列只恨,將這兩列對應(yīng)值相同的行進(jìn)行去重。默認(rèn)值為subset=None表示考慮所有列抬虽。

  • keep='first'表示保留第一次出現(xiàn)的重復(fù)行官觅,是默認(rèn)值。keep另外兩個取值為"last"和False阐污,分別表示保留最后一次出現(xiàn)的重復(fù)行和去除所有重復(fù)行缰猴。
  • inplace=True表示直接在原來的DataFrame上刪除重復(fù)項,而默認(rèn)值False表示生成一個副本疤剑。

將副本賦值給dataframe:

data=data.drop_duplicates(subset=None,keep='first',inplace=False)
20滑绒、對數(shù)據(jù)進(jìn)行排序
df.sort_values("col",ascending=False)
21、日期只要年月日
df['just_date'] = df['dates'].dt.date
22隘膘、agg函數(shù)的基礎(chǔ)使用
group = df.groupby(['col1','col2'])
group.agg({"二級批發(fā)價":sum})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疑故,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弯菊,更是在濱河造成了極大的恐慌纵势,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钦铁,居然都是意外死亡软舌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門牛曹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佛点,“玉大人,你說我怎么就攤上這事黎比〕” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵阅虫,是天一觀的道長演闭。 經(jīng)常有香客問我,道長颓帝,這世上最難降的妖魔是什么米碰? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮购城,結(jié)果婚禮上见间,老公的妹妹穿的比我還像新娘。我一直安慰自己工猜,他們只是感情好米诉,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著篷帅,像睡著了一般史侣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魏身,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天惊橱,我揣著相機與錄音,去河邊找鬼箭昵。 笑死税朴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的家制。 我是一名探鬼主播正林,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼颤殴!你這毒婦竟也來了觅廓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涵但,失蹤者是張志新(化名)和其女友劉穎杈绸,沒想到半個月后帖蔓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡瞳脓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年塑娇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劫侧。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡埋酬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出板辽,到底是詐尸還是另有隱情奇瘦,我是刑警寧澤棘催,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布劲弦,位于F島的核電站,受9級特大地震影響醇坝,放射性物質(zhì)發(fā)生泄漏邑跪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一呼猪、第九天 我趴在偏房一處隱蔽的房頂上張望画畅。 院中可真熱鬧,春花似錦宋距、人聲如沸轴踱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淫僻。三九已至,卻和暖如春壶唤,著一層夾襖步出監(jiān)牢的瞬間雳灵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工闸盔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悯辙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓迎吵,卻偏偏與公主長得像躲撰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子击费,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容