IO:导入导出数据
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文件,默认是逗号 , header 是否导入第一行为列名 否则填 None |
查看前5行数据:
1 | df.head() |
通过type(df) 查看df类型 => pandas.core.frame.DataFrame
查看每一列数据:
1 | df[ '列名' ] |
通过 type(df['fips']) 得知 => pandas.core.series.Series
查看某一行数据:
1 2 | df.loc[索引] 索引不仅可以是数字,还可以是字符串! |
I/O数据写出:
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) |
读取报错处理:
1.先把数据文本转换成utf-8 文本
2.error_bad_lines = False 默认True 出现错误,报错
3.encoding = 'gbk'
Missing Value (NaN) 需要优先处理
1.针对数值型!
2.查看Missing Value的行
1 2 3 | df.isnull() df.notnull() |
3.替换
1 | df.fillna( 0 ) #统一换成0 数值型,字符型也会替换成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:方向 |
获取行列总数
1 | df.shape # 不包含索引 ! |
获取索引
1 | df.index # 返回一个迭代器 |
获取列名
1 | df.columns |
行列颠倒
1 | df.T # 转制 |
切片( 前闭后开 )
1 | df[ 1 : 5 ] # 索引 |
选取某列或多列
1 2 3 4 5 6 | # 某一列 (填入列名) df.fips df[ 'fips' ] (推荐) # 多列 最外层用[ ] 包含 df[[ 'fips' , 'area_name' ]] |
增加一列
1 | df[ 'xxx' ] = None |
重命名某列 返回新数据集! 原始不变
1 2 3 | df.rename(columns = { "old_lab" = "new_lab" }) df.rename(columns = { "old_lab" = "new_lab" },inplace = True ) # 替换原来数据集 |
删除 返回新数据集! 原始不变
1 | df.drop( 'label' , axis = 1 ) # axis 轴 0 代表行, 1 列 inplace=True |
计算频次
1 | df[ 'arer_name' ].value_counts() |
设置索引位
1 | dfnew = df.set_index( "area_name" ) # 索引位:可以重复,可以为字符串类型 |
需要注意这3者区别
1 2 3 4 5 6 7 8 | df.loc[ 1 : 4 ] # 针对索引名称进行操作! df[ 1 : 4 ] # 针对索引进行操作! df.iloc[ 1 : 4 ] # 针对索引进行操作! # 切片针对索引进行操作! 具有 前闭后开 属性 # 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 | # 注意括号位置 制定运行顺序! 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的结合,输入的既可以是名称也可以是位置 (不推荐) |
查询
1 2 3 4 5 6 7 8 9 10 11 12 13 | df.query( "PST045214 > 100000 & PST040210 > 100000 " ) df.query( "state_abbreviation == 'AL' " ) # 注意 如果使用字符串进行比较 ,,要用单引号! * * * * * * * * * * * * * * * * * num = 100000 df.query( "PST045214 > num & PST040210 > num " ) # 报错!, 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' ] |
处理多重索引时,先对其进行排序
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 # 报错 ! |
联系客服