Series
由數(shù)組和列表創(chuàng)建Series是一個(gè)淺拷貝(只拷貝引用地址,不拷貝對(duì)象本身)對(duì)象數(shù)值變化鼎文,數(shù)組也變
- from pandas import Series
- 引入Series
- Series([1,2,3,4,5],index=list("abcde"))
- 創(chuàng)建和索引
- Series({"a":1,"b":2,"c":3})
- 由字典創(chuàng)建
- s.values
- 顯示值
- s.index
- 顯示索引
- s[]
- 按字典索引
- s.ix
- 顯示隱式都可
- s.loc
- 顯示索引
- s.iloc
- 隱式索引
- s.size
- 大小
- s.shape
- 形狀
- pd.read_csv("./titanic.txt")
- 讀取csv文件
- 變量名.head(3)
- 前幾條
- 變量名.tail(10)
- 最后幾條
- pd.isnull()
- 判斷是否為空
- pd.notnull()
- 判斷是否為空
DataFrame
dic = {
"姓名":["狗蛋","劉德華","鹿晗","TF","張柏芝","謝霆鋒"],
"語(yǔ)文":[120,130,140,110,110,100],
"數(shù)學(xué)":[130,110,100,100,100,120],
"外語(yǔ)":[120,130,123,125,112,143],
"綜合":[230,240,254,234,100,100]
}
df = DataFrame(dic,index=list("abcdef"))
創(chuàng)建DataFrame
- df.columns
- 橫索引
- df.index
- 縱索引
- df2.add(df1,fill_value=0)
- fill_value參數(shù)在補(bǔ)用它的值去填補(bǔ)缺失的地方
- (注意)原來(lái)既缺行又缺列的仍然補(bǔ)nan
- df.cumsum()
- ue.groupby(["contb_receipt_dt","party"])[["contb_receipt_amt"]].sum().unstack(level=1).cumsum().cumsum()
- 分完組之后累計(jì)求和
Python Operator | Pandas Method(s) |
---|---|
+ |
add() |
- |
sub() , subtract()
|
* |
mul() , multiply()
|
/ |
truediv() , div() , divide()
|
// |
floordiv() |
% |
mod() |
** |
pow() |
Series與DataFrame之間的運(yùn)算
- 使用Python操作符:以行為單位操作(參數(shù)必須是行)渔肩,對(duì)所有行都有效。(類似于numpy中二維數(shù)組與一維數(shù)組的運(yùn)算拇惋,但可能出現(xiàn)NaN)
- 使用pandas操作函數(shù):
- axis=0:以列為單位操作(參數(shù)必須是列)周偎,對(duì)所有列都有效。
- axis=1:以行為單位操作(參數(shù)必須是行)撑帖,對(duì)所有行都有效蓉坎。
-
df2.add(s_row,axis=1)
- df2中的與s_row同樣的一行里面數(shù)值進(jìn)行相加。
-
np.nan(NaN)
-
np.nan(NaN)
- np.nan是浮點(diǎn)類型胡嘿,能參與到計(jì)算中蛉艾。但計(jì)算的結(jié)果總是NaN。
- 但可以使用np.nan*()函數(shù)來(lái)計(jì)算nan,此時(shí)視nan為0勿侯。
- pandas中None與np.nan都視作np.nan
-
np.nansum(nd)
- 視nan為0之后求和拓瞪。
-
pandas中None與np.nan的操作
-
df.isnull()
- 判斷是否為空,按照dataframe形式顯示
-
df.notnull()
- 與上述相反
-
df.isnull().all(axis=0)
- 判斷每一列中的所有元素是否全為T(mén)rue助琐,如果是則為T(mén)rue
-
df.isnull().any(axis=0)
- 判斷每一列中是否有為T(mén)rue的元素祭埂,如果有一個(gè)為T(mén)rue,則為T(mén)rue
-
df.dropna(axis=1,how="any")
- axis 0 默認(rèn)兵钮,代表操作行 1 代表操作列
- how "any"默認(rèn)只要有缺失就丟棄 "all"所有的都缺失才丟掉
-
df.fillna(1000)
- 直接填補(bǔ)為nan的
-
df.fillna(method="bfill",axis=0)
- 拿后面的行標(biāo)對(duì)應(yīng)的值填充到前面的nan位置
-
df.fillna(method="ffill",axis=0)
- 拿前面的行標(biāo)對(duì)應(yīng)的值填充到前面的nan位置
-
隱式構(gòu)造
-
s = Series(data=[100,98,89,90],
index=[["張三","張三","李四","李四"],["期中","期末","期中","期末"],
["a","b","a","b"]])
s- Series也可以創(chuàng)建多層索引
-
df = DataFrame(data=[100,98,89,90],
index=[["張三","張三","李四","李四"],["期中","期末","期中","期末"],
["a","b","a","b"]],
columns = ["python"]
)
df- DataFrame隱式構(gòu)造
-
顯示構(gòu)造pd.MultiIndex
-
mindex =pd.MultiIndex.from_arrays([["a",'a','a','b','b','b'],
['一單元',"二單元","三單元",'一單元',"二單元","三單元"]])
mindex- 使用數(shù)組
-
mindex = pd.MultiIndex.from_tuples([("河南","鄭州"),
("河南","洛陽(yáng)"),
("山東","濟(jì)南"),
("河北","石家莊"),
("北京","天安門(mén)"),
("四川","成都"),
("江蘇","南京")])- 注意:每個(gè)元組代表一個(gè)行(或列)的索引名蛆橡,索引名要用元組的元素來(lái)體現(xiàn)
mindex - 使用tuple
- 注意:每個(gè)元組代表一個(gè)行(或列)的索引名蛆橡,索引名要用元組的元素來(lái)體現(xiàn)
-
mindex = pd.MultiIndex.from_product([["河南","山東"],['鄭州','濟(jì)南']])
mindex- 使用product
索引的堆
- df1.stack(level=1)
- 使用stack()的時(shí)候,level等于哪一個(gè)掘譬,哪一個(gè)就消失泰演,出現(xiàn)在行里。
- df.unstack(level=2)
- 使用unstack()的時(shí)候葱轩,level等于哪一個(gè)粥血,哪一個(gè)就消失,出現(xiàn)在列里酿箭。
過(guò)濾
- df.where(df>50,other=0)
- 這個(gè)函數(shù)是根據(jù)條件來(lái)過(guò)濾,并將不符合的改成0
級(jí)聯(lián)
- pd.concat([df1,df2])
- 和np.concatenate一樣趾娃,優(yōu)先增加行數(shù)(默認(rèn)axis=0)
- pd.concat([df1,df2],axis=1)
- 增加列數(shù)
- 注意index在級(jí)聯(lián)時(shí)可以重復(fù)
- 也可以選擇忽略ignore_index缭嫡,重新索引
- 不匹配指的是級(jí)聯(lián)的維度的索引不一致。例如縱向級(jí)聯(lián)時(shí)列索引不一致抬闷,橫向級(jí)聯(lián)時(shí)行索引不一致(通俗的講就是級(jí)聯(lián)完了索引是1231234這種妇蛀,并不是啟用統(tǒng)一的級(jí)聯(lián))
- pd.concat([df1,df2],keys=["教學(xué)","品保"])
- 使用多層索引 keys
- pd.concat([df1,df3],axis=0,join="outer")
- 外連接
- 1、不匹配級(jí)聯(lián)在外連接的模式下要求如果axis=0行級(jí)聯(lián)列索引必須保持一致
- axis=1列級(jí)聯(lián)行索引必須保持一致
- 2笤成、如果不一致缺哪個(gè)索引就補(bǔ)全哪個(gè)索引
- pd.concat([df1,df3],axis=0,join="inner")
- 內(nèi)連接:只連接匹配的項(xiàng)
- 內(nèi)連接在級(jí)聯(lián)的時(shí)候不一致的地方全部丟棄
- pd.concat([df1,df4,df5],axis=1,join_axes=[df1.index])
- 連接指定軸
合并
- df1.merge(df3)
- 使用pd.merge()合并時(shí)评架,會(huì)自動(dòng)根據(jù)兩者相同column名稱的那一列,作為key來(lái)進(jìn)行合并炕泳。
- df1.merge(df5,on="name",suffixes=["實(shí)際","假的"])
- 如果兩個(gè)表有多個(gè)相同的屬性纵诞,需要指定以哪一個(gè)屬性為基準(zhǔn)來(lái)合并
- df1.merge(df6,left_on="name",right_on="姓名")
- 如果兩個(gè)表沒(méi)有相同的屬性,可以左邊的表出一個(gè)屬性培遵,右邊的表出一個(gè)屬性浙芙,然后進(jìn)行合并
- 這種合并兩個(gè)屬性不能并在一起
- df1.merge(df6,right_index=True,left_index=True)
- 用索引來(lái)合并
- df1.merge(df7,how="inner")
- 內(nèi)合并:只保留兩者都有的key(默認(rèn)模式)
- df1.merge(df7,how="outer")
- 外合并 how='outer':補(bǔ)NaN
- df1.merge(df7,how="right")
- df1.merge(df7,how="left")
- 左和并:以左側(cè)為基準(zhǔn),左側(cè)有右側(cè)沒(méi)有補(bǔ)nan籽腕,左側(cè)沒(méi)有右側(cè)有去掉
- 有合并:和上面相反
刪除重復(fù)元素
- df.duplicated()
- 返回值為一個(gè)Series記錄著每一行的重復(fù)情況嗡呼,如果某一行不是第一次出現(xiàn)就認(rèn)為他是重復(fù)
- 返回是否重復(fù)的bool值
- df.drop_duplicates(inplace=True)
- 刪除重復(fù)數(shù)據(jù)
映射
- df.replace({"red":"blue","green":20},inplace=True)
- 把字典的鍵替換成值
- df["h5"].map(lambda x : x-40)
- 按照函數(shù)來(lái)替換
- df.rename(columns={"外語(yǔ)":"English"},index=func)
- 替換索引
異常值檢測(cè)和過(guò)濾
- df.describe()
- 顯示個(gè)數(shù),平均數(shù)皇耗,標(biāo)準(zhǔn)差南窗,最大值等信息
排序
- np.random.permutation()
- 函數(shù)隨機(jī)排序(隨機(jī)打亂)
- df.take([1,0,1])
- 按索引提取,一般與上個(gè)函數(shù)一起用
- ue.sort_values(by=["contb_receipt_dt"])
- 按照值排序
- data.sort_index(axis=1,ascending=False)
- 按照索引降序排列
數(shù)據(jù)聚合
- price_mean = df.groupby(["item"])[["price"]].mean()
- 分組后万伤,按照組進(jìn)行求和窒悔,平均等操作
- price_mean.round(2)
- round讓結(jié)果在輸出的保留幾位小數(shù)
- df.groupby(["color"]).transform(sum)
- 高級(jí)數(shù)據(jù)聚合(顯示樣式有區(qū)別)
- df.groupby(["color"]).apply(sum)
- 高級(jí)數(shù)據(jù)聚合(顯示樣式有區(qū)別)
-
轉(zhuǎn)換日期類型
- pd.to_datetime(ue["contb_receipt_dt"])
- 從字符串類型轉(zhuǎn)到日期類型