python数据分析基础知识

  1. 常用数据结构
  • List,tuple,dir,series,dataframe
  • 区别:list可修改,tuple不可修改
  • 操作:pop弹出最后一个元素;alist.append([5,6,7])在最后直接加上;alist.extend([5,6,7])  把元素打开后添加到list里面去。

 

  1. I/O数据的导入导出
  • do=pd.read_csv("country_facts.csv"),一般只推荐read_csv,因为从EXCEL里面读取数据容易出错,excel转换成csv或者txt再进行读文件。excel读取: pandas.read_excel()不推荐。
  • 一般步骤:

Pwd #查看当前文件夹;

df=pd.read_csv()

df.head()  #查看前几行,默认为五行;

type(df)  #查看当前类型,例如这个是dataframe数据框,最前面的列是索引(重要!) ,每一列的数据类型都是相同的,各自列数据类型相互独立。  Series如果取出第一列df['fips'],这个是series,可以理解为一个dataframe是由不同的series组成的;

df.loc(0)  #取一行,type(df.loc[0])也是一个series ,(索引变成了行的字符串);Series为一维数据,DataFrame为二维数据。

  • 处理数据保存到本地:DataFrame.to_csv(),df.to_csv("df1.csv")
  • 为什么读取的数据是乱码的?(尤其是读取中文的时候)

解决方法:设置参数encoding="gbk",error_bad_lines=False;或者文件转换为utf-8;或者使用python3

 

  1. 字典的创建
  • adir={'a':1,'b':2}
  • pd.series(adir,name="shujufenxi")  #字典被转换为series key为索引。
  • Pd.DataFrame(adir,index=[0])   #时候'a' 'b'变成了列的第一行名称,dataframe必须要传入索引,否则会报错。
  • Pd.DataFrame.from_dict(adir,orient="index")  #这时候'a' 'b'变为索引,orient为方向。

 

 

  1. Missing value
  • 一般针对数值型的,如果是文本型的可以用空格替代,不太重要。

例如:df1=pd.read_csv("df.csv",error_bad_line=False,encoding="gbk")#设置成False后可以在读到missing value之后不会停止而是继续读下去,这里encoding的设置是在报错的时候尝试这样解决。

  • 检查:df1.isnull(), df.notnull     # 一般来说missingvalue是数值型,字符型不能用数字替换(没有意义)。

替换:df.fillna(0) #0替换missing value,但一般来说没有意义。

删除:df.dropna() # 整个样本都会被删掉,不推荐。

 

  1. 索引的选取:
  • dataframeseries的属性:方法是动态的有(),方法是静态的无括号  #df.index为属性,无括号, index=df.index,

df.T为转置,df.shape查看行列数目,不包括索引。

  • 选取行:df[1;5]

列选取:选取某一列   

df["fips"]    #选取一列 , df[["a","b"]]推荐使用这种,不推荐使用df.class

df["class"]=None   #df增加一列,值为none

  • rename重命名:

df.rename??  

df.rename(columns={"class":"label"}).head()  #"class"变为"label",但是返回的是新的数据集,原始数据并不发生变化。       df.rename(columns={"class":"label"}inplace=True)  #取代,对原有的数据进行修改。

df.drop??  

df.drop("label",axis=1,inplace=True)   #在列上面进行删除,轴设置为1

df['area_name'].value_counts() #计算频次:把某一列的元素出现的次数统计出来。

  • 索引选取:
    • loc常用,用在选取索引名称,但在选取索引的位置时使用ilox

df.loc  

df.loc[1:4]  #不是前闭后开(凑巧这里索引是数字)  

df[1:4]      #前闭后开 

df.iloc[1:4] #前闭后开

df.set_index?     #将某一列设置为索引   

dfnew=df.set_index("are_name")  

dfnew.loc[1:4]   #找不到索引,loc是对索引名称进行切片 

dfnew.loc["Alabama"] #跟“”有关的所有样本会被选出来   

df.iloc[1:4]     #可以找到索引,但是对字符串是绝对不可以的,是对索引的位置进行选择,不是对名称   

dfnew.loc["Barbour",["fips","state"]]#逗号前面是对索引操作,逗号后面是对列进行操作,在这里所有只能用名称进行操作

     dfnew.iloc[1:4,:2]      #只能用数字操作不能用名称,传统的切片。

 

#creat a label ,when area_name==USlabel=1 else label=0

代码:

df.loc[df['area_name']=="unite states"]   #将索引位上True的位置选取出来

df.loc[df['area_name']=="unite states""label"]=1  #label列赋值为1

df.loc[df['area_name']!=="unite states""label"]=0

 

#PST>==100000 AND PST04>=100000  labelp=1 else labelp=0

Df,loc[(df['PST']>=100000)&(df['PST']>=100000),'labelp']=1 #运算优先级,括号里先运算

Df,loc[~((df['PST']>=100000)&(df['PST']>=100000)),'labelp']=0 #加括号和波浪号~:取这个条件的全部的反面

 

  • df.ix[1:4,['fips']] #可以混合选取索引名称和位置,df.ix[1:4]为闭区间,但是需要判别是选取索引名称还是索引位置,是要消耗运行的,所以推荐lociloc

 

  • df.query("PST">=100000&pst04>=100000) #运行的时候要注意优先级,字符串作比较的时候用单引号'',只能在当前的语句使用; 不能使用引用变量值

 

 

  1. 多重索引:
  • 前处理:

movie=pd.read_csv("movie_metadata.csv")

movie.dtypes  #每一列的属性

movie["movietitle"]=movie["movie_title"].map(lambdas:s.stripe(""))   #处理空格

movie.head()

  • 双重索引:

movie.set_index(['director_name','duration'],drop=False,append=False,inpalce=True)

           #drop作用于列,append作用于索引,inplace取代原来变量,原来的索引就不存在了,使这两个字符串作为索引

Index=movie.index   #索引赋值

len(index)

Index.get_leveal_values(1)   #设置了两个索引,只有0层和1层索引,所以这里括号内只能为01

movie.loc['Avatar']          #在第0level上进行的操作,不行?

movie.swapelevel(0,1)        #交换leverl方法

movie.sort_index(inplace=True)#对数据进行排序,这个是对索引按照alphabet进行排序

slice()选取  slice1100)索引的值的范围选取出来

 

movie.loc[(slice(None),"Avatar"),:]  #0level不进行slice,不管什么都选取出来;第1level只选取'Avater'的行(多个元素选取使用列表或者切片) ,最后的:表示对所有列选取或者选取特定列(用列表表示),多重索引必须指定列,这是和loc单重索引的区别

Idx.pd.IndexSlice

movie.loc[ ( ["james","jon"] , slice (100,200) ), "movie_title" ]=1   #这里可以创建新变量比如"movie_title"=1,但是不能使用~()

 

  • PS:关于括号,方括号为列表,圆括号代表函数、tupe 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值