pandas模块-基本数据类型
导入模块
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
1.Series
pd.Series()返回一个有index和values属性的数据对象
s= pd.Series([4,-7,3,9])
s
(1)自定义索引
s1=Series([4,7,6,5],index=['a','b','c','d'],dtype=float)
(2)读取Series
使用0-n的索引读取
s1[0]
自定义索引
s1['a']
如果自定义索引是纯数字,就不能用0-n的索引读取了,只能用自定义
s2=Series([4,7,6,5],index=[4,5,6,7],dtype=np.float64)
s2
Sereis.loc[‘自定义索引’]
s2.loc[6]
Sereis.iloc[0-n的数字]
s2.iloc[2]
可以用loc更改索引对应的值,如果没有就新加进去
s1.loc['e']=8
读取多个值会得到新对象
单点读取
s1[['a','c']]
区间读取:Series[start,end,step]
s1['a':'c']
(3)通过字典数据得到Series(key变成索引,value变成值)
创造一个字典
build_price={'beijing':68000,'shanghai':54000,'guangzhou':35000,'shenzhen':72000}
将字典转为Series
s3=Series(build_price)
s3
给定index参数值,他会进行匹配,按照给定的顺序显示,若数据匹配不上则显示NaN
index4=['beijing','guangzhou','shanghai','shenzhen']
s4=Series(build_price,index=index4)
s4
index4=['beijing','guangzhou','shanghai','shenzheng','haerbin']
s4=Series(build_price,index=index4)
s4
创建后再更改index也是可以的
s3.index=list('abcd')
s3
2.DataFrame
表格型数据,就像excel一样有行有列
(1)把numpy的二维数组转为DataFrame
默认行索引与列索引都是0-n
df = DataFrame( np.arange(10,22).reshape(3,4) )
df
可以自定义索引
df1= DataFrame( np.arange(10,22).reshape(3,4),
index=list('abc'),
columns='one,two,three,four'.split(','))
df1
(2)通过字典来创建DataFrame
先创建一个字典然后在转为DataFrame
df_dict={
'city':'北京,上海,广州,深圳,台北'.split(','),
'price':(6800,54000,35000,72000,50000),
'year':np.arange(2015,2020)
}
df2=DataFrame(df_dict)
df2
可以更改列索引的顺序
DataFrame(df_dict,columns=['year','city','price'])
(3)读取DataFrame
先取出df2
df2
读取列:df[’ ']
df2['city']
读取列:df.列名称
df2.year
读取行:df.loc[ ]
df2.loc[0]
读取单一值:df.loc(行,列)
取出2019
#直接读取:
df2.loc[4,'year']
#间接读取
df2.year[4]
#间接读取
df2.loc[4].loc['year']
(4)增加新列
df[‘columnName’]=值
同样的值
df2['new1']=5
df2
不同的值
df2['new2']=np.arange(5.)
df2
若列名已经存在则修改值
df2['new1']=100
df2
(5)行增加和修改
df.loc[ ]=xxx
df2.loc[4,'year']=2020
df2
当我们想增加新列 我们如果直接给数字或者是数组的时候 行索引是自动匹配的,但是如果我们给的数据已经有索引的Series。而Series是有索引的,那么就会进行 索引匹配,能匹配上则给值进去,不能则没有
创建一个series
spe_s=Series(np.arange(7)*3,index=[0,23,4,5,6,9,'new'])
spe_s
和df2合并
df2['new5']=spe_s
df2
创建series时给相同索引
spe_s2=Series(np.arange(7)*3,index=df2.index)
spe_s2
合并
df2['new5']=spe_s2
df2
也可以直接复制values,就不会涉及到索引了
df2['new7']=spe_s2.values
df2
(6)删除
删除列:del df[列名称]
**df.drop(key , axis=0 ,inplace=False) **
key:具体的名称
axis:控制删行删列
inplace:是否在原数据修改
df2.drop('new4',inplace=True,axis=1)
df2