在Pandas中,Series是一维容器,DataFrame表示一个数据表。DataFrame中的任一行、任一列都是Series。
Series
创建
Series的创建可以指定index。
- 使用列表创建
s1 = pd.Series(['banana','apple']a, index=["fruit1", "fruit2"])
- 使用数组创建
arr = np.arange(1, 5)
s2 = pd.Series(arr, index=["a", "b", "c", "d"])
- 使用字典创建
dic = {"name": "丁少侠", "age": 20, "grade": [100, 99, 88]}
s3 = pd.Series(dic)
查
两种方法效果一样:
s1.fruit1
s1["fruit1"]
还可以使用loc和iloc的方法:
s1.iloc[0]
s1.loc["fruit1"]
增、改
增、改语法相同。
s2["a"]=2 '''修改'''
s2["e"]=5 '''增加'''
删
del方法
del s2["b"]
drop方法
x1 = s2.drop("a") '''s2不会发生改变,但去掉"a"的series会付给x1'''
s2.drop("a",inplace=True) '''当指定了inplace=True后,s2才会发生改变'''
s2.drop(["a","c"],inplace=True) '''删除多个index'''
DataFrame
创建
dataFrame的创建可以指定index和columns
- 使用字典创建
字典的keys将作为dataFrame中的columns
data={"one":np.random.randn(4),"two":np.linspace(1,4,4),"three":['zhangsan','李四',999,0.1]}
df=pd.DataFrame(data,index=[1,2,3,4])
- 使用数组创建
data=np.random.randn(6,4)
df=pd.DataFrame(data,columns=list('ABCD'),index=[1,2,'a','b','2006-10-1','第六行'])
查
- 按列读取
- 单列
df.A
df['A']
- 多列
df[['A',"B"]]
- iloc
df.iloc[:1] #读取第一列
df.iloc[:,1:3] #读取第1列到第3列
df.iloc[:,2:] #读取第2列之后的数据
df.iloc[:,:3] #读取前3列数据
- 部分连续的取法
df.iloc[:,[1,4,6]+list(range(8,12))]
- 按行读取
- 单行
df.loc['行标签']
df.loc[['行标签']]
- 多行
df.loc[['行标签1','行标签2','行标签n']]
- iloc
df.iloc[1]
df.iloc[[1,2]]
df.iloc[1:4]
- 部分连续的取法
df.iloc[[1,4,6]+list(range(8,12))]
增
- 列
- 直接增:
df['列名']=[数据]
- 用concat增加:
dataAddCol=pd.DataFrame({'e':[11,12,12]})
dataSet=pd.concat([dataSet,dataAddCol],axis=1)
- 行
- 用concat增加:
dataAddRow=pd.DataFrame([[5,6,7,8]],columns=['a','b','c','d'])
dataSet=pd.concat([dataSet,dataAddRow])
删
axis默认为0,也就是默认按行删除
- 列
dataSet.drop([dataSet.columns[0]],inplace=True,axis=1)#仅知道列号
dataSet.drop(['b'],inplace=True,axis=1)#知道列名
- 行
dataSet.drop(dataSet.index[6],inplace=True)#仅知道行号
dataSet.drop([6],inplace=True)#知道行名
columns & index的指定
- 创建DataFrame的时候可以使用colums参数指定列的顺序,也可以使用index来指定行索引
name_list = pd.DataFrame(data = {'Occupation':['Teacher','IT Engineer'],'Age':[28,36]},
columns=['Age','Occupation'],
index=['Tom','Bob'])
- set_index用于将某一列指定为index
name_list.set_index('Occupation',drop=False) '''指定一列。
参数drop默认为True,意为将该列设置为索引后从数据中删除
如果设为False,将继续在数据中保留该行。'''
data.set_index(['one','two']) '''指定多列'''
- 如果要设置的index不在数据中,可以通过.index进行指定。columns可通过.columns修改
df.index=['a','b','c','d'] '''修改index'''
df.columns=['a','b','c','d'] '''修改columns'''
- 重置index,参数drop默认值为False,意为将原来的索引做为数据列保留,如果设为True,原来的索引会直接删除。
df.reset_index(drop=True)