自學(xué)整理記錄朴皆,大神見笑
為什么要學(xué)習(xí)pandas
- numpy是處理數(shù)值型數(shù)據(jù)
- pandas除了能處理numpy處理的數(shù)據(jù)以外,還能處理其他類型數(shù)據(jù)
- 導(dǎo)包
import pandas as pd
- 注:pandas安裝不上搔课,可以用源碼安裝胰柑,百度pandas pypi;whl執(zhí)行文件爬泥,tar.gz壓縮文件
pandas的常用數(shù)據(jù)類型
Series
一維柬讨,帶索引的數(shù)組
Series創(chuàng)建
t = pd.Series(np.arange(5),index=list("abcde"))
- 注:index是指定索引
- 注:index要和數(shù)組長(zhǎng)度相等
temp_dict = {"name":"xiaohong","age":1,"tel":"119"}
pd.Series(temp_dict,index=list("name"))
注:還可以通過傳字典來創(chuàng)建
注:字典創(chuàng)建也可以傳入索引,如果傳入的索引存在袍啡,則對(duì)應(yīng)之前索引的值踩官;如果是全新的索引,那么值為NaN
注:在numpy中為nan境输,在pandas中為NaN
pandas之Series切片和索引
list = {"name": "xiaohong", "age": 1, "tel": "119"}
t = pd.Series(list)
t["age"]
t[1]
t[:2]
t[[1,2]]
注:分別表示取到age對(duì)應(yīng)的值卖鲤;索引1對(duì)應(yīng)的值肾扰;前兩行對(duì)應(yīng)的值;第一行和第二列對(duì)應(yīng)的值
注:如果取值中的鍵值沒有蛋逾,那么值為NaN
pandas之Series索引和值
t.index
- 注:獲取所有索引
- 注:返回index類型
t.values
注:獲取所有值
注:返回ndarray類型
注:ndarray中很多方法都可以運(yùn)用于series類型集晚,比如argmax,clip
注:series具有where方法区匣,但結(jié)果和ndarray不同
pandas讀取外部數(shù)據(jù)
pd.read_csv # 讀取csv文件
pd.read_clipboard # 讀取剪切板文件
pd.read_excel # 讀取excel文件
pd.read_json # 讀取json文件
pd.read_html # 讀取html文件
pd.read_pickle #
pd.read_sql #
pd.read_sql_query #
pd.read_sql_table #
pd.read_sql(sql_sentence,connection) # 讀取mysql偷拔,傳入sql語(yǔ)句,連接即可亏钩;
# 讀取mongodb,獲取到第一條數(shù)據(jù)
client = MongoClient()
collection = client["MyMongo"]["test1"]
data = list(collection.find())
t1 = pd.Series(data[0])
DataFrame
二維莲绰,Series容器
創(chuàng)建DataFrame
pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))
- DataFrame對(duì)象既有行索引,又有列索引
- index是行索引姑丑,columns是列索引
temp_dict = [{"name":"xiaohong","age":1,"tel":"119"},{"name":"xiaoxiao","tel":"110"}]
pd.DataFrame(temp_dict)
- 注:也可以傳字典生成DataFrame
- 注:如果有缺失的值蛤签,用NaN代替
DataFrame方法
- 行數(shù) 列數(shù)
df.shape
- 列數(shù)據(jù)類型
df.dtypes
- 數(shù)據(jù)維度
df.ndim
- 行索引
df.index
- 列索引
df.columns
- 對(duì)象值,二維ndarray數(shù)組
df.values
- 顯示前幾行栅哀,默認(rèn)5行
df.head()
- 顯示末尾幾行震肮,默認(rèn)5行
df.tail()
- 相關(guān)信息
df.info()
- 快速綜合統(tǒng)計(jì)結(jié)果
df.describe()
- 排序
df.sort_values(by="Count",ascending=False)
注:by參數(shù)表示按照哪列排序,默認(rèn)升序
注:ascending參數(shù)默認(rèn)True升序留拾,F(xiàn)alse為降序
取行和取列
t = pd.DataFrame(np.arange(12).reshape(3, 4),index=list("abc"),columns=("WXYZ"))
df.loc["a":"c","W"]
df.iloc[[0,2],[2,1]]
注:loc中的冒號(hào)是閉合的
注:loc是通過索引獲取數(shù)據(jù)
注:iloc是通過實(shí)際位置獲取數(shù)據(jù)
更改值
t = pd.DataFrame(np.arange(12).reshape(3, 4),index=list("abc"),columns=("WXYZ"))
df.loc["a":"c","W"] = 1
df.iloc[[0,2],[2,1]] = np.nan
注:直接賦值即可
注:直接將nan賦值即可戳晌,不需要先轉(zhuǎn)換為float類型,因?yàn)镈ataFrame已經(jīng)在底層轉(zhuǎn)換了
pandas布爾索引
df[(df["Row"].str.len() > 4) & (df["Count"] > 700)]
注:不同的條件之間需要用括號(hào)括起來痴柔,用&且沦偎、|或連接
注:.str就可以取到字符串,.len()就會(huì)獲得長(zhǎng)度
pandas字符串方法
方法 | 說明 |
---|---|
cat | 元素級(jí)字符串連接操作咳蔚,sep參數(shù)指定連接的字符串 |
contains | 返回表示各字符串是否含有指定的布爾型數(shù)組 |
DataFrame缺失數(shù)據(jù)的處理
數(shù)據(jù)缺失兩種情況
1.為空豪嚎,NaN等
2.為0,可能是真數(shù)據(jù)谈火,也可能是填充數(shù)據(jù)疙渣,區(qū)分對(duì)待判斷數(shù)據(jù)是否為NaN
pd.isnull(df)
- 判斷數(shù)據(jù)是否不為NaN
pd.notnull(df)
- 刪除NaN的數(shù)據(jù)的行或者列或者個(gè)體
t.dropna(axis=0,how="any",inplace=True)
注:how參數(shù)默認(rèn)為any,有一個(gè)為NaN堆巧,就刪除;all泼菌,全部是NaN才刪除
注:inplace參數(shù)默認(rèn)為False谍肤,不修改原數(shù)據(jù);True為修改原數(shù)據(jù)
在NaN處填充數(shù)據(jù)
t.fillna(t.mean())
t["age"].fillna(t["age"].mean())
- 注:通常替換均值哗伯,第一種是所有列的均值替換荒揣,第二種是替換某一列的
- 注:pandas中的t.mean()會(huì)將NaN剔除,然后計(jì)算均值焊刹,與numpy不同
數(shù)據(jù)合并
- 按照行索引合并
df1.join(df2)
- 詳細(xì)如圖:
注:以df1行為基準(zhǔn)系任,沒有的值填NaN
按照列索引合并
df1.merge(df2)
- 詳細(xì)如圖:
數(shù)組分組
- grouped = df.groupby(by="Country")
- 將csv文件按照country分組恳蹲,返回DataFrameGroupBy對(duì)象,該對(duì)象可以遍歷俩滥,可以統(tǒng)計(jì)數(shù)量等
- grouped中的每一個(gè)元素是一個(gè)元組嘉蕾,元組里面是(索引(分組的值),分組之后的DataFrame)