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行数据:

通过type(df) 查看df类型 => pandas.core.frame.DataFrame
查看每一列数据:

通过 type(df['fips']) 得知 => pandas.core.series.Series
Frame中每一列是个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的行
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 2 3 4 5 6 | # 某一列 (填入列名)
df.fips
df[ 'fips' ] (推荐)
# 多列 最外层用[ ] 包含
df[[ 'fips' , 'area_name' ]]
|

增加一列
重命名某列 返回新数据集! 原始不变
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( " " ))
|
查看类型

交换索引
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 # 报错 !
|
|