Pandas基礎(chǔ)筆記

jupyter創(chuàng)建虛擬環(huán)境

在cmd環(huán)境下創(chuàng)建虛擬環(huán)境命令:

conda env list -n env_name python=3.7(版本可任意指定涕侈,env_name為自己命名滩愁,如my_py)?

或者這樣寫?conda create --name my_py python=3.7

查看當(dāng)前擁有的虛擬環(huán)境 conda env list

刪除虛擬環(huán)境 conda remove -n my_py --all

進(jìn)入虛擬環(huán)境 conda activate my_py

退出虛擬環(huán)境 conda deactivate

讓虛擬環(huán)境自動關(guān)聯(lián)notebook,安裝命令 conda install nb_conda

指定下載鏡像 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts

1.DataFrame

創(chuàng)建df = pd.DataFrame(array)

查看類型 type(df)

查看數(shù)據(jù)類型 df.dtype(s)

返回ndarray類型的對象?df.values (ndarray 的值類型都是統(tǒng)一的)

獲取行索引?df.index

獲取列索引 df.columns

查看一列有多少種值 df.age.unique()

設(shè)置性別列為行索引 df.set_index('性別')

獲取行及列索引 df.axes

數(shù)據(jù)預(yù)覽 df. info()

查看數(shù)據(jù)按列的統(tǒng)計信息?df.describe()

顯示前 i 行數(shù)據(jù) df.head(i)

顯示后 i 行數(shù)據(jù) df.tail(i)

查看大小?df.size

輸出行數(shù) df.shape[0]

輸出列數(shù)?df.shape[1]

輸出行列?df.shape

求極值?df.max()?df.min()

求均值?df.mean()

求總和?df.sum()

計算標(biāo)準(zhǔn)差 df.std()

求出現(xiàn)次數(shù)?df.age.value_counts().head()

累加求和 df.cumsum(0) 也可寫成np.cumsum(df,0) (其中的傳入?yún)?shù)0表示axis=0谦纱,即按照行累加)

修改列索引 df.columns=['name','age','sex','height']

使用rename函數(shù)修改列索引?df.rename(columns={'姓名':'name', '年齡':'age', '性別':'sex'},inplace=True)

替換一列值 df.sex.replace('female','男',inplace=True)??df.sex.replace('male','女',inplace=True)

還可以使用map函數(shù)替換?df.sex = df['sex'].map({'男':'female','女':'male'})

排序 df.sort_values(['age','height'],ascending=[True,False])(ascending=True默認(rèn)凑队,F(xiàn)alse表示降序债蓝。ascending=[True,False]先升序后降序届谈,若都降序?qū)懸粋€即可)

增加一列?df['列名'] = 1 (賦值為1)

刪除一列?del df['列名']

刪除一行?df.drop(labels=0) (labels 是行列的名字魔吐,默認(rèn)axis=0刪除行,為1則刪除列)

最值的索引位置?df.idxmax()

給空值賦值零 df.fillna(0)

2.DataFrame 與 Series

Series創(chuàng)建?s1 = pd.Series([1,2,3,4])

查看類型?type(s1)

轉(zhuǎn)dataframe類型 s1.to_frame()

轉(zhuǎn)置 s1.to_frame().T(行與列對調(diào))

dataframe series區(qū)別dataframe里的一維數(shù)組為series類型

3.pandas讀取文件

pd.read_csv(filepath, header = 0) 從文件第0行讀起(文件行數(shù)從0開始計數(shù))

pd.read_csv(filepath,skiprows=[1,2]) 從文件第0行讀起钩乍,跳過文件第1第2行

pd.read_csv(filepath, skiprows=lambda x : x%2 == 0) 跳過取余2等于0的行

pd.read_csv(filepath, header=2, skiprows = 2) 從第四行開始讀起

pd.read_csv(filepath,keep_default_na=False) 保持?jǐn)?shù)據(jù)原樣輸出(默認(rèn)為True,會使無數(shù)據(jù)的輸出為NaN)

4.pandas的索引

選取行

(1)位置索引,獲取第2 行 df.loc[2]

(2)列表索引,獲取0,1,2行 df.loc[[0,1,2]]

(3)切片索引?df.loc[0:4]

(4)布爾索引?df['年齡']>30 (返回的是索引列+年齡列的布爾值)

df.loc[df['年齡']>30] (返回篩選后的整表辞州,與df[df['年齡']>30] 效果相同)

**iloc 和 loc 的區(qū)別**

(1) loc 是基于索引值的,切片是左閉右閉的

(2) iloc 是基于位置的寥粹,切片是左閉右開的

選取列

df[['年齡','城市']].head()

選取行列

df.loc[[0,3],['年齡','性別']]

df.loc[df['年齡']>18,:]

df.loc[0:5,'年齡']? 取年齡列的前0-5個值(索引值不存在0:5時)

一些索引語句

as_index=True默認(rèn)变过,F(xiàn)alse表示不展示索引項

inplace=False(默認(rèn))表示原數(shù)組不變,對數(shù)據(jù)進(jìn)行修改之后結(jié)果給新的數(shù)組涝涤。

inplace=True表示直接在原數(shù)組上對數(shù)據(jù)進(jìn)行修改媚狰。

reset_index用來重置索引,因為有時候?qū)ataframe做處理后索引可能是亂的。

drop=True就是把原來的索引index列去掉口锭,重置index哗脖。

drop=False就是保留原來的索引,添加重置的index辨宠。兩者的區(qū)別就是有沒有把原來的index去掉。

5.數(shù)據(jù)關(guān)聯(lián)

拼接 pd.concat([left,right],ignore_index=True) (ignore_index=True 重置index, 為False保留之前的index货裹,默認(rèn)False)

pd.concat([left,right],axis=1) (asix 為0是為上下合并(有相同的列)嗤形,為1時為橫向的合并(有相同的行))

內(nèi)連接(默認(rèn)) result = pd.merge(left,right,on=['key1', 'key2'])

外連接?pd.merge(left, right, how='outer', on=['key1', 'key2'])

左連接 result = pd.merge(left, right, how='left', on=['key1', 'key2'])

右連接?pd.merge(left, right, how='right', on=['key1', 'key2'])

列名不一如何關(guān)聯(lián)(內(nèi)連接)? pd.merge(left,right,left_on = ['key1','key2'],right_on = ['key3','key4'])

通過索引關(guān)聯(lián)(外連接)? pd.merge(left,right,left_index=True,right_index=True)

6.分組操作

groups = df.groupby('district') 地區(qū)聚合

groups.groups 索引列所在行的集合

len(groups)

for name,group in groups:

? ? print(name) 打印地區(qū)名

groups.agg([np.mean,np.sum,np.std]) 每一列都求多個聚合函數(shù)

groups.age.agg([np.mean,np.sum,np.std]) 針對具體列聚合

groups.agg({"age":np.mean,"novip_buy_times":np.sum})?不同列不同聚合函數(shù)

7.轉(zhuǎn)換過濾

transform函數(shù)?

s_score = lambda s : (s-s.mean())/s.std()

groups = df.groupby("district")

groups[['age','novip_buy_times','novip_buy_moneys']].transform(s_score)

分組過濾

df2 = groups.filter(lambda g : g['vip_buy_moneys'].mean() >= 2000)

df3.round({'A':1,'C':2}) (round(列名,小數(shù)點(diǎn)位數(shù))默認(rèn)保存整數(shù))

8.pandas連接mysql

import pandas as pd

import numpy as np

import pymysql

pymysql.install_as_MySQLdb()

from sqlalchemy import create_engine

engine = sqlalchemy.create_engine('mysql://用戶名:登陸密碼@主機(jī)地址:端口號/數(shù)據(jù)庫?charset=gbk',echo=False)

sql='select * from stu'

df = pd.read_sql(sql,engine)

從mysql讀取數(shù)據(jù):

df1 = pd.DataFrame({'name':['zhangsan','wagnwu','zhaoliu'],

? ? ? ? ? ? ? ? ? 'age':[18,19,17]})

寫入數(shù)據(jù)到mysql:

df1.to_sql('stu',engine,index=False,if_exists='append')

9.numpy.ndarray

構(gòu)造一個 ndarray:

matrix = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])

快速創(chuàng)建 一個三行四列的ndarray且填充指定值1:np.full([3,4],1)

填充0值:np.zeros ((3,4))

填充1值:np.ones( (2,3,4)) (二維三行四列數(shù)組)

使用 arange 生成序列:np.arange( 10, 30, 5 ) (起始為10,5為步長弧圆,30為結(jié)尾取不到)

np.arange(12).reshape(4,3) (四行三列赋兵,從0到11)

隨機(jī)矩陣:np.random.random((2,3)) (得到一個2行3列的矩陣,默認(rèn)會產(chǎn)生 -1 到 +1 的隨機(jī)值)

平均分配:

from numpy import pi

np.linspace( 0, 2*pi, 100 ) (0到2*pi平均分成100等份)

進(jìn)行其他操作:np.sin(np.linspace( 0, 2*pi, 100 ))

10.numpy的切片和索引

直接索引 matrix[1,4]? matrix[[0,1],[2,3]](0行開始計數(shù))

使用切片?data[0:3,[0,1]] (切片左閉右開)

bool 索引 matrix==10

多個條件判斷 res = (matrix == 10) | (matrix == 20) (輸出bool值)

vector[res] (輸出篩選后的ndarray)

11.數(shù)據(jù)可視化

plt.subplot(221)表示將整個圖像窗口分為2行2列, 當(dāng)前位置為1.

plt.subplot(223)表示將整個圖像窗口分為2行2列, 當(dāng)前位置為3(第二行第一列).

第一個參數(shù)代表子圖的行數(shù)搔预;第二個參數(shù)代表該行圖像的列數(shù)霹期; 第三個參數(shù)代表每行的第幾個圖像。





























最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拯田,一起剝皮案震驚了整個濱河市历造,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖帕膜,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枣氧,死亡現(xiàn)場離奇詭異,居然都是意外死亡垮刹,警方通過查閱死者的電腦和手機(jī)达吞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荒典,“玉大人酪劫,你說我怎么就攤上這事∷露” “怎么了覆糟?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長遮咖。 經(jīng)常有香客問我滩字,道長,這世上最難降的妖魔是什么御吞? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任麦箍,我火速辦了婚禮,結(jié)果婚禮上陶珠,老公的妹妹穿的比我還像新娘挟裂。我一直安慰自己,他們只是感情好揍诽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布诀蓉。 她就那樣靜靜地躺著,像睡著了一般暑脆。 火紅的嫁衣襯著肌膚如雪渠啤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天添吗,我揣著相機(jī)與錄音埃篓,去河邊找鬼。 笑死根资,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的同窘。 我是一名探鬼主播玄帕,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼想邦!你這毒婦竟也來了裤纹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鹰椒,沒想到半個月后锡移,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漆际,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年淆珊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奸汇。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡施符,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出擂找,到底是詐尸還是另有隱情戳吝,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布贯涎,位于F島的核電站听哭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏塘雳。R本人自食惡果不足惜陆盘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粉捻。 院中可真熱鬧礁遣,春花似錦、人聲如沸肩刃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盈包。三九已至沸呐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呢燥,已是汗流浹背崭添。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叛氨,地道東北人呼渣。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像寞埠,于是被迫代替她去往敵國和親屁置。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360