mport pandas as pd
import numpy as np
#列表型数据
alist=list([1,2,3,4])
b=list([5,6,7,8])
type(alist)#查看alist的数据类型
alist.append(5)#在尾部加入数据
alist.pop()#出栈
alist#直接查看alist链表中的元素,list结构中可以整形、字符型混合
aList.append("b")#list结构中可以整形、浮点型、字符型混合
#元祖型数据
aTuple = tuple([1,2])#不可修改
#字典类型
aDir = {"a":1,"b":2}#a和b为key(键),key a 为1,b 为2
aDir['a'] #查看 key为 a 的值
aDir.get("a") #同上
aDir.get("c")#源字典中没有key c,但不会报错,aDir['c']会报错
#在此环境下可使用一些cmd窗口命令
cd 目录#设置工作目录
pwd #查看当前工作目录
ls
#读取数据操作
df = pd.read_csv("test1.csv",sep = ",")#读取该目录下该文件,并且以“,”作为分隔符
df.head() #查看头几行
df_excel = pd.read_excel("data.xlsx",sheetname=0)#读取excel文件,sheetname=0选择第一个sheet
type(df) #查看其类型
#列向量
aSeries = pd.Series([1,2,3,4],name="test")#建立一维列向量
aSeries#查看结果为0 1,前面为index(索引),用于检索
1 2
2 3
3 4
type(df['ID'])#df中的名为ID的列也是Series类型
type(df.loc[0])#
#数据结构常用操作
df['ID']#查看ID这一列的值
df.ID#同上,最好使用上面方法
df.columns#查看列名
df.rename(columns={"default payment next month":"class"},inplace=True)#将df中的default payment next month的列名更换为class,如果inplace=False或默认不写,则不会替换,但会显示
df.columns#查看列名
#上面是整体查看,也可部分查看
df[['ID',"class"]].head()#查看ID列和class列头几行
bdir = {} #首先定义bdir字典,然后for循环1到100次,行名是“k”+i(字符类型),i为元素存储其中
for i in range(1,100):
bdir["k"+str(i)] = i
df1 = pd.DataFrame(bdir,index=[0])#为bdir建立在df1数据框,索引名为0
pd.DataFrame.from_dict(bdir) # BUG,这里小白老师说是个BUG
pd.DataFrame.from_dict(bdir,orient='index') # github 转化成为列,因为后面有orient='index'
df.index#查看索引
df.shape#查看大小
df.describe()#查看其描述
df.mean()#查看其数据统计情况
df.sum(axis = 1)#
df['flag'] = df["class"] * 2#将class列的数据均乘2赋值到flag列中
df['SEX'].value_counts()#统计SEX列中不同数据的个数
df[0:2] #数据切片,结果为索引号为0、1的行,区间左闭右开
df[10:15] #同理
#df.loc[index,column(default)] 函数写法
df.loc[10:15,["ID","SEX"]]#针对名称查找,查找ID列和SEX列的10到15行(索引号为10到15,左闭右闭)
testDF = pd.DataFrame(data = np.random.rand(5,3),index = list('abcde'),columns = list('ABC'))
#建立数据框,索引为abcde,列名为ABC,
#data = np.random.rand(5,3),生成5行3列的随机数据,np为numpy库的缩写,在前面已经定义好
testDF.loc['a':'c']#针对名称查找索引名称a到索引名称c的数据
testDF.iloc[0:3]#针对位置查找
testDF.ix['a':'c',[1,2]]#选取a到c行的1到2列,“,”区分行列,“:”表示遍历
testDF.ix[:'c',['B','C']]#同上,从第一行开始,ix与loc和iloc不同为不区分名称或位置
#总结:iloc 是对索引位置选取,类似于切片
# loc 是对索引名称选取
#需求:我想要选取出AGE >= 30的数据
df[df['AGE'] >= 30].head()#嵌套形式,df['AGE']>=30选取出AGE列大于30的元素并返回True,而后再次选取一遍,就能得出结果
df.loc[df['AGE']>= 30].head()#结果同上,方法不同
df.loc[df['AGE']>= 30].head()#这样选取是错误的
df.query("AGE >= 30").head()#查询的方式选取
df[(df["AGE"]>= 30 & df["SEX"] == 2)] # 这是错误的
df[(df["AGE"]>= 30) & (df["SEX"] == 2)].head()#正确,与上面相比加入了括号
df.loc[(df["AGE"]>= 30) & (df["SEX"] == 2)].head()#同上,方法不同
df.query("AGE >= 30 & SEX == 2").head()#此方法可以使用
#需求:增加一列名字叫flag
#when AGE >= 30 & SEX == 2 falg = 1
#否则 flag = 0
df.drop("flag",axis = 1,inplace = True)#因为原先存在,所以先删除,axis=1表示增加纵轴,=0增加横轴
df.loc[(df["AGE"]>= 30) & (df["SEX"] == 2),'flag'] = 1
df.loc[~((df["AGE"]>= 30) & (df["SEX"] == 2)),'flag'] = 0
df.flag.value_counts()#统计
df.shape#查看发现增加了一列
adult= pd.read_csv("adultTest.csv")#读取