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ù)代表每行的第幾個圖像。