IO:導(dǎo)入導(dǎo)出數(shù)據(jù)
1 2 3 4 5 6 | import pandas as pd df = pd.read_csv(filepath_or_buffer, sep = ',' , header = 'infer' , index_col = None , names = None , na_values = None , error_bad_lines = True , parse_dates = False ) sep 分隔符,csv文件,默認(rèn)是逗號 , header 是否導(dǎo)入第一行為列名 否則填 None |
查看前5行數(shù)據(jù):
1 | df.head() |
通過type(df) 查看df類型 => pandas.core.frame.DataFrame
查看每一列數(shù)據(jù):
1 | df[ '列名' ] |
通過 type(df['fips']) 得知 => pandas.core.series.Series
查看某一行數(shù)據(jù):
1 2 | df.loc[索引] 索引不僅可以是數(shù)字,還可以是字符串! |
I/O數(shù)據(jù)寫出:
1 | DataFrame.to_csv(path_or_buf = None , sep = ', ' , na_rep = ' ', float_format=None, columns=None, header=True, index=True, index_label=None, mode=' w ', encoding=None, compression=None, quoting=None, quotechar=' " ', line_terminator=' \n ', chunksize=None, tupleize_cols=False, date_format=None, doublequote=True, escapechar=None, decimal=' .', * * kwds) |
讀取報(bào)錯處理:
1.先把數(shù)據(jù)文本轉(zhuǎn)換成utf-8 文本
2.error_bad_lines = False 默認(rèn)True 出現(xiàn)錯誤,報(bào)錯
3.encoding = 'gbk'
Missing Value (NaN) 需要優(yōu)先處理
1.針對數(shù)值型!
2.查看Missing Value的行
1 2 3 | df.isnull() df.notnull() |
3.替換
1 | df.fillna( 0 ) #統(tǒng)一換成0 數(shù)值型,字符型也會替換成0 |
4.刪除
1 | df.dropna( 0 ) # 將含有 NaN 的行刪除! (不推薦) |
dataframe與series的屬性
1.字典 => series (key => 索引)
2.字典 => dataframe 需要指定索引!
1 2 3 | pd.DataFrame( dict ,index = [ 0 ]) pd.DataFrame.from_dict( dict ,orient = 'index' ) # 字典中的key 變成索引 , orient:方向 |
獲取行列總數(shù)
1 | df.shape # 不包含索引 ! |
獲取索引
1 | df.index # 返回一個迭代器 |
獲取列名
1 | df.columns |
行列顛倒
1 | df.T # 轉(zhuǎn)制 |
切片( 前閉后開 )
1 | df[ 1 : 5 ] # 索引 |
選取某列或多列
1 2 3 4 5 6 | # 某一列 (填入列名) df.fips df[ 'fips' ] (推薦) # 多列 最外層用[ ] 包含 df[[ 'fips' , 'area_name' ]] |
增加一列
1 | df[ 'xxx' ] = None |
重命名某列 返回新數(shù)據(jù)集! 原始不變
1 2 3 | df.rename(columns = { "old_lab" = "new_lab" }) df.rename(columns = { "old_lab" = "new_lab" },inplace = True ) # 替換原來數(shù)據(jù)集 |
刪除 返回新數(shù)據(jù)集! 原始不變
1 | df.drop( 'label' , axis = 1 ) # axis 軸 0 代表行, 1 列 inplace=True |
計(jì)算頻次
1 | df[ 'arer_name' ].value_counts() |
設(shè)置索引位
1 | dfnew = df.set_index( "area_name" ) # 索引位:可以重復(fù),可以為字符串類型 |
需要注意這3者區(qū)別
1 2 3 4 5 6 7 8 | df.loc[ 1 : 4 ] # 針對索引名稱進(jìn)行操作! df[ 1 : 4 ] # 針對索引進(jìn)行操作! df.iloc[ 1 : 4 ] # 針對索引進(jìn)行操作! # 切片針對索引進(jìn)行操作! 具有 前閉后開 屬性 # loc 輸入的值必須是索引的名稱,iloc 輸入的是索引的位置 |
選取多列
1 2 3 | dfnew.loc[ 'Barbour County' ,[ 'fips' , 'state_abbreviation' ]] dfnew.iloc[ 1 : 5 ,: 2 ] |
定位
1 2 3 | df.loc[ df[ 'area_name' ] = = 'United States' ] df.loc[ df[ 'PST045214' ] > 1000000 ] |
賦值
1 | df.loc[ df.[ 'area_name' ] = = 'United States' , 'new_lab' ] = 0 |
加條件判斷的賦值
1 2 | # 注意括號位置 制定運(yùn)行順序! df.loc[ (df.[ 'PST045214' ] > = 100000 ) & (df.[ 'PST040210' ] > = 100000 ) , 'labelP' ] = 1 |
條件取反賦值
1 | df.loc[ ~((df.[ 'PST045214' ] > = 100000 ) & (df.[ 'PST040210' ] > = 100000 )) , 'labelP' ] = 0 |
loc 與 iloc 的綜合
1 2 3 4 | df.ix[ 1 : 4 ] df.ix[ 1 : 4 , [ 'fips' , 'area_name' ] ] # ix是loc與iloc的結(jié)合,輸入的既可以是名稱也可以是位置 (不推薦) |
查詢
1 2 3 4 5 6 7 8 9 10 11 12 13 | df.query( "PST045214 > 100000 & PST040210 > 100000 " ) df.query( "state_abbreviation == 'AL' " ) # 注意 如果使用字符串進(jìn)行比較 ,,要用單引號! * * * * * * * * * * * * * * * * * num = 100000 df.query( "PST045214 > num & PST040210 > num " ) # 報(bào)錯!, query 不支持變量!! * * * * * * * * * * * * * * * * * num = 1000000 df.loc[ df[ 'PST045214' ] > num ] # loc 支持變量!! |
多重索引
1 | movie.set_index([ 'director_name' , 'movie_title' ]) |
1 | movie.set_index([ 'director_name' , 'movie_title' ] , drop = False , append = True ) # False 保留作為索引兩列 append 添加索引 |
1 2 3 | index.get_level_values( 0 ) # 獲得0層索引 index.get_level_values( 1 ) # 獲得1層索引 |
對0層索引操作
1 | movie.loc[ 'James Cameron' ] |
處理多重索引時,先對其進(jìn)行排序
1 | movie.sort_index(inplace = True ) |
對多層索引操作
1 2 3 4 5 6 7 | movie.loc[( slice ( None ) , 178.0 ) ,:] # 逗號不可去掉, movie.loc[( slice ( None ) , slice ( 178.0 , 200.0 )) ,:] movie.loc[( slice ( None ) , slice ( 178.0 , 200.0 )) , [ 'color' , 'genres' ]] movie.loc[ ([ 'James Cameron' , 'Gore Verbinski' ] , slice ( 178.0 , 200.0 )),[ 'color' , 'genres' ]] |
處理空格
1 | movie[ "movie_title" ] = movie[ "movie_title" ]. map ( lambda s : s.strip( " " )) |
查看類型
1 | movie.dtypes |
交換索引
1 | movie.swaplevel( 0 , 1 ) |
idx
1 2 3 4 | idx = pd.IndexSlice movie.loc[ idx[ : , 100.0 : 200.0 ] ,:] movie.loc[( slice ( None ) , slice ( 100.0 , 200.0 )),:] |
xs()
1 2 3 4 5 | movie.xs( 'James Cameron' ,level = 0 ) # 第0層索引選取 movie.xs( 'James Cameron' ,level = 'director_name' ) movie.xs(( 178 , 'James Cameron' ),level = ( 1 , 0 )) |
取反場合
1 2 3 | movie.loc[ ([ 'James Cameron' , 'Jon Gunn' ] , slice ( 100.0 , 200.0 )), "new_lab" ] = 1 movie.loc[~( ([ 'James Cameron' , 'Jon Gunn' ] , slice ( 100.0 , 200.0 ))), "new_lab" ] = 1 # 報(bào)錯 ! |