【Python数据分析】第一篇--基础操作

  IO:导入导出数据

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

df.head()

  通过type(df) 查看df类型  => pandas.core.frame.DataFrame

  查看每一列数据:

df['列名']

  通过 type(df['fips']) 得知 => pandas.core.series.Series

  Frame中每一列是个series

  查看某一行数据:

df.loc[索引]
索引不仅可以是数字,还可以是字符串!

  I/O数据写出:

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的行

df.isnull()

df.notnull()

3.替换

df.fillna(0)		#统一换成0   数值型,字符型也会替换成0

4.删除

df.dropna(0)    # 将含有 NaN 的行删除! (不推荐)

  dataframe与series的属性

1.字典 => series  (key => 索引)

2.字典 => dataframe   需要指定索引!

pd.DataFrame(dict,index=[0])	

pd.DataFrame.from_dict(dict,orient = 'index' )   # 字典中的key 变成索引  , orient:方向

      

   获取行列总数

df.shape    # 不包含索引 !

  获取索引

df.index    # 返回一个迭代器

  获取列名

df.columns

  行列颠倒

df.T  # 转制

  切片( 前闭后开 )

df[1:5]  # 索引

  选取某列或多列

# 某一列 (填入列名)
df.fips    
df['fips']  (推荐)

# 多列  最外层用[ ] 包含
df[['fips','area_name']] 

  增加一列

df['xxx'] = None

  重命名某列  返回新数据集! 原始不变

df.rename(columns={"old_lab"="new_lab"})

df.rename(columns={"old_lab"="new_lab"},inplace=True)    # 替换原来数据集

  删除  返回新数据集! 原始不变

df.drop('label', axis = 1)  # axis 轴  0 代表行, 1 列	inplace=True

  计算频次

df['arer_name'].value_counts()

  设置索引位

dfnew =  df.set_index("area_name")    # 索引位:可以重复,可以为字符串类型

  需要注意这3者区别

df.loc[1:4]    # 针对索引名称进行操作!

df[1:4]    # 针对索引进行操作!

df.iloc[1:4]    # 针对索引进行操作!

# 切片针对索引进行操作! 具有 前闭后开 属性
# loc 输入的值必须是索引的名称,iloc 输入的是索引的位置

  选取多列

dfnew.loc['Barbour County',['fips','state_abbreviation']]

dfnew.iloc[1:5,:2]

  

  定位

df.loc[ df['area_name'] == 'United States']

df.loc[ df['PST045214'] > 1000000 ]

  赋值

df.loc[ df.['area_name'] == 'United States' , 'new_lab'] =0

  加条件判断的赋值

# 注意括号位置 制定运行顺序!
df.loc[ (df.['PST045214'] >= 100000) & (df.['PST040210'] >= 100000)  , 'labelP' ] =1	    

  条件取反赋值

df.loc[ ~((df.['PST045214'] >= 100000) & (df.['PST040210'] >= 100000))  , 'labelP' ] =0

  loc 与 iloc 的综合

df.ix[ 1:4 ]		
df.ix[ 1:4 , ['fips','area_name'] ]    	

# ix是loc与iloc的结合,输入的既可以是名称也可以是位置  (不推荐)

  查询

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 支持变量!!

  多重索引

movie.set_index(['director_name','movie_title'])

movie.set_index(['director_name','movie_title'] , drop= False , append = True) # False 保留作为索引两列  append 添加索引

index.get_level_values(0)    # 获得0层索引

index.get_level_values(1)    # 获得1层索引

  对0层索引操作

movie.loc['James Cameron']

  处理多重索引时,先对其进行排序

movie.sort_index(inplace= True)

  对多层索引操作

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']]  

  处理空格

movie["movie_title"] = movie["movie_title"].map(lambda s : s.strip(" "))

  查看类型

movie.dtypes

  交换索引

movie.swaplevel(0,1)

  idx

idx = pd.IndexSlice
movie.loc[ idx[ : , 100.0:200.0] ,:]

movie.loc[(slice(None) , slice(100.0 , 200.0 )),:]

  xs()

movie.xs('James Cameron',level = 0)    # 第0层索引选取

movie.xs('James Cameron',level = 'director_name')

movie.xs((178,'James Cameron'),level = (1,0))

  取反场合

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    # 报错 !

  

 

posted @ 2017-01-12 20:03  5_FireFly  阅读(1038)  评论(0)    收藏  举报
web
counter