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为二维数据。
解决方法:设置参数encoding="gbk",error_bad_lines=False;或者文件转换为utf-8;或者使用python3。
例如:df1=pd.read_csv("df.csv",error_bad_line=False,encoding="gbk")#设置成False后可以在读到missing value之后不会停止而是继续读下去,这里encoding的设置是在报错的时候尝试这样解决。
替换:df.fillna(0) #用0替换missing value,但一般来说没有意义。
删除:df.dropna() # 整个样本都会被删掉,不推荐。
df.T为转置,df.shape查看行列数目,不包括索引。
列选取:选取某一列
df["fips"] #选取一列 , df[["a","b"]]推荐使用这种,不推荐使用df.class
df["class"]=None #给df增加一列,值为none
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() #计算频次:把某一列的元素出现的次数统计出来。
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==US,label=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 #加括号和波浪号~:取这个条件的全部的反面
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层索引,所以这里括号内只能为0,1
movie.loc['Avatar'] #在第0个level上进行的操作,不行?
movie.swapelevel(0,1) #交换leverl方法
movie.sort_index(inplace=True)#对数据进行排序,这个是对索引按照alphabet进行排序
slice()选取 slice(1,100)索引的值的范围选取出来
movie.loc[(slice(None),"Avatar"),:] #第0个level不进行slice,不管什么都选取出来;第1个level只选取'Avater'的行(多个元素选取使用列表或者切片) ,最后的:表示对所有列选取或者选取特定列(用列表表示),多重索引必须指定列,这是和loc单重索引的区别。
Idx.pd.IndexSlice
movie.loc[ ( ["james","jon"] , slice (100,200) ), "movie_title" ]=1 #这里可以创建新变量比如"movie_title"=1,但是不能使用~()