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ǔ)上進行分組分析,最終得到如下代碼

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           # 解決保存圖像是負號'-'顯示為方塊的問題

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)值相同的行進行去重。默認(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ù)進行排序
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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容