簡介
pandas是基於numpy的庫,一維數據用Series,二維數據用DataFrame,以下所有例子都基於
#基本操作
一維初始化及按行索引
a=Series([1,2,3])#默認索引從0開始
b=Series([1,2,3],index=['a','b','c'])#可設置索引
c=Series({'a':1,'b':2,'c':3})#可結合字典
# print(c.keys())
# print(c.index)
#修改索引
c.index=['d','e','f']#修改索引
print(c)
#按行索引,無按列索引
# print(c['d'])
# print(c[0])
# print(c[0:2])
# print(c[[0,2]])
d 1
e 2
f 3
dtype: int64
二維初始化及按行按列索引
a={'fea1':[1,2,3],'fea2':[4,5,6],'fea3':[7,8,9]}
df=DataFrame(a)#用字典初始化
df.columns.name='FEA'#設置列名
df.index.name='INDEX'#設置索引名
print(df)
# print(df.columns)#Index(['fea1', 'fea2', 'fea3'], dtype='object', name='FEA')
#按行索引
# print(df[0:2])
# print(df.ix[1])
# print(df.ix[0:1])
# print(df.ix[[1,2]])
#按列索引
# print(df[['fea1','fea3']])
# print(df[df.columns[:2]])
#按照列重排
# df.columns=['fea3','fea1','fea2']
# print(df)
#查找某行某列的數據
# .loc .iloc .ix
#查找某個元素
# .get_value .at .iat
FEA fea1 fea2 fea3
INDEX
0 1 4 7
1 2 5 8
2 3 6 9
一維轉換類型
.to_string() .to_dict() .tolist() .to_json() .to_frame() .to_csv()
二維轉換類型
.to_json() .tolatex() .to_excel()
利用條件查找數據
query也可以用來排除一些異常數據
a={'fea1':[1,2,3],'fea2':[4,5,6],'fea3':[7,8,9]}
df=DataFrame(a)#用字典初始化
print(df)
# #單個條件
# print(df[df['fea2']>5])
# #多個條件
# print(df[(df['fea2']>4) & (df['fea3']<9)])#注意這裏多個條件要()
# print(df.query('fea2>4 and fea3<9'))#注意引號的位置
# canshu=9
# print(df.query('fea2>4 and fea3<@canshu'))#注意引用外部參數時要使用@
計算
.sum .mean .max .min
描述
.shape 大小
.dtype 數據類型
.info 多種信息(包含數據量、特徵、數據類型)
.describe 統計量信息
a={'fea1':[1,2,3],'fea2':[4,5,6],'fea3':[7,8,9]}
df=DataFrame(a)#用字典初始化
print(df.describe())
fea1 fea2 fea3
count 3.0 3.0 3.0
mean 2.0 5.0 8.0
std 1.0 1.0 1.0
min 1.0 4.0 7.0
25% 1.5 4.5 7.5
50% 2.0 5.0 8.0
75% 2.5 5.5 8.5
max 3.0 6.0 9.0
預覽
.head()#頭5行
.tail()#後5行
.sample(5)#隨機5行
統一操作
Series:.map
Dataframe:.apply .applymap
#數據清洗
補充缺失值
a=DataFrame({'col1':[1,2,3,None,5],'col2':[2,3,None,3,4]})
print(a)
# print(a.fillna('missing_value'))#將缺失值作爲一個特殊的值
# print(a.fillna(a.mean()))#補均值
#補附近的值
# print(a.fillna(method='bfill'))#back fill 即用後一個值填充
# print(a.fillna(method='ffill',limit=1))#補前一個值,limit=1表示連續的缺失只補1個
#插值補值
# print(a.interpolate(method='polynomial',order=2))#二次多項式插值
# print(a.interpolate(method='spline',order=3))#三次樣條插值
去除有缺失值的行
a=DataFrame({'col1':[1,2,3,None,5,None],'col2':[2,3,None,3,4,None]})
print(a)
#刪掉有0的行
print(a.dropna())
#刪掉全0的行
# print(a.dropna(how='all',axis=0))#這裏有點反常識,0表示行,1表示列
去重去列特徵
a=DataFrame({'col1':[1,2,3,None,5,None,1],'col2':[2,3,None,3,4,None,2]})
print(a)
print(a.drop_duplicates())#去重
print(a.drop('col2',axis=1))#去列特徵
#用於文件存取
csv文件
a=DataFrame({'col1':[1,2,3,None,5,None,1],'col2':[2,3,None,3,4,None,2]})
#csv文件的生成
# a.to_csv('cshi.csv',index=None,mode='a',header=True)#a表示追加模式,header=False表示不再寫入列名
#csv文件的讀取
b=pd.read_csv('cshi.csv')
print(b)
excel文件
與xls文件一樣,如果不和pandas結合,一個xlsx文件的生成分爲【建表-增加sheet-寫入-保存關閉】四步,這裏討論與pandas庫結合的方法,分爲【建立writer-增加sheet內容-保存關閉】三步。除了xlsxwriter外,另一個可以對xlsx文件進行更精細操作的庫爲openpyxl。
a=DataFrame({'col1':[1,2,3,None,5,None,1],'col2':[2,3,None,3,4,None,2]})
#xlsx文件的生成
# writer=pd.ExcelWriter('ceshi.xlsx',engine='xlsxwriter')
# a.to_excel(writer,sheet_name='ces')
# writer.save()
#xlsx文件的讀取
b=pd.read_excel('ceshi.xlsx',sheet_name='ces')
print(b)