pandas介绍
pandas是基于NumPy的一个Python数据分析包,主要目的是为了数据分析。它提供了大量高级的数据结构和对数据处理的方法。
pandas有两个主要的数据结构:Series和DataFrame。
pd.concat
Series
获取Series对象的索引或者数组内容
获取索引:obj.index
获取数组内容:obj.value
其中obj为Series对象
获取/重新赋值Series对象的单个数据
Series对象里的单个数据,和普通数组一样,通过索引获取对应的数据或者重新赋值。
索引可以是自己设置的索引,也可以是0,1,2这样的数字。
DataFrame
查看DataFrame的index、columns,values
frame.name / frame.columns / frame.values
修改列名
修改某个列名(可以随意修改个数):df=df.rename(columns = {‘old_name’:’new_name’})
修改所有列名(暴力求解):df.columns = [‘a’,’b’,’c’]
修改索引
修改索引
obj.set_index(keys)
obj指的是DataFrame对象。
这个key的值可以是序列类型;也可以是调用者的一个列名,即将某一列设为新数组的索引。
重新索引,index参数对行重新索引,columns参数对列重新索引。
obj.reindex(index=None,**kwargs)
obj指的是DataFrame对象。
新index是以0开始的递增整数列,原index会变成一个新的列。
obj.reset_index()
obj指的是DataFrame对象。
如果不需要原来的index中的值可以加drop = True。
obj = obj.reset_index(drop=True)
obj指的是DataFrame对象。
选择对象
pandas对象的index不限于整数,所以当使用非整数作为切片索引时,它是末端包含的。
行列选择
obj[]只能进行行选择,或列选择,不能同时进行列选择,列选择只能是列名。
行选择
行可以直接通过[]选择,只是必须是数字范围或者字符串范围索引(不同于series只有数字或字符串也可以)。
obj[[True,False,True,False,True]],内部list必须和行数相同,可以选择指定的行。
列选择
obj = obj[[‘user’, ‘check-in_time’, ‘location_id’]]
选择多列,obj为DataFrame对象。后面为选择的列名,只能用列名,不能用索引。
obj.ix[:,0:-1]
连续选择多列(选择除最后一列的所有列示例)。
obj[obj.columns[-1]]或者obj.ix[:,-1]
获取/重新赋值DataFrame对象的列数据
DataFrame不仅可以以字典索引的方式获取数据,还可以以属性的方法获取。
frame.name / frame[‘name’]
其中,frame为DataFrame对象。
获取/重新赋值DataFrame对象的行数据
以切片的方式获取,frame[0:3]会返回前三行数据。
通过标签来选择数据
frame.loc[:, [‘a’, ‘b’] ]
表示选取所有的行以及columns为a,b的列。
通过位置来选择数据
frame.iloc[1:2,1:2]
表示选取第一行第一列的数据(切片后面的值取不到)。
结合标签和位置的混合索引(结合loc和iloc的功能)
frame.ix[1]
表示选取第一行数据。
frame.ix[‘e’]
表述选取标签为‘e’的行数据。
使用条件来选择
frame[frame.c>0]
表示选择c列中大于0的数据。
drop_duplicates函数 DataFrame中函数
DataFrame.drop_duplicates(subset=None, keep=’first’, inplace=False)
说明:去重复行。subset用来指定特定的列,默认所有列。keep删除重复项并保留第一次出现的项目,可选“first”、“last”。inplace表示在原来数据上修改还是保留一个副本。
apply函数 DataFrame中函数
apply函数可以对DataFrame对象进行操作,既可以作用于一行或者一列的元素,也可以作用于单个元素。
obj.apply(func, axis=0, args=(), **kwds)
obj指的是DataFrame对象。
groupby函数 DataFrame中函数
df.groupby(‘key1’)[‘data1’]是df[‘data1’].groupby(df[‘key1’])的语法糖。
df.groupby(‘key1’)[[‘data2’]]是df[[‘data2’]].groupby(df[‘key1’])的语法糖。
level参数。
merge函数 pandas中函数
可以根据一个或多个键将不同DataFrame中的行连接起来。
类似于SQL中的JOIN。
通过键拼接列。
res = pd.merge(left, right, on = ‘key’)
类似数据库操作中的联接,只有’key’属性值一样才联接到一起。
- 默认以重叠的列名当做连接键。
- 默认做inner连接(取key的交集),连接方式还有(left,right,outer),制定连接方式加参数:how=’‘。
- 多键连接时将连接键组成列表传入,例:pd.merge(df1,df2,on=[‘key1’,’key2’]。
- 如果两个对象的列名不同,可以分别指定,例:pd.merge(df1,df2,left_on=’lkey’,right_on=’rkey’)。
- 以索引当做连接键,使用参数left_index=true,right_index=True(最好使用join)。
join函数 DataFrame函数
join方法提供了一个简便的方法用于将两个DataFrame中的不同的列索引合并成为一个DataFrame。
拼接列,主要用于索引上的合并。
- join方法默认为左外连接how=left。
- 默认按索引合并,可以合并相同或相似的索引,不管他们有没有重叠列。
- 可以连接多个DataFrame。
- 可以连接除索引外的其他列。
- 连接方式用参数how控制。
- 通过lsuffix=’‘,rsuffix=’‘,区分相同列名的列。
Joining on index.
Joining key columns on an index.(列和index来join)
concat函数 pandas中函数
concat方法相当于数据库中的全连接(UNION ALL),可以指定按某个轴进行连接,也可以指定连接的方式join(outer,inner只有这两种)。与数据库不同的时concat不会去重,要达到去重的效果可以使用drop_duplicates方法
pandas使用pd.concat函数,与np.concatenate函数类似,只是多了一些参数。
drop函数 DataFrame、Series函数
删除Series的元素或DataFrame的某一行(列)的意思,通过对象的.drop(labels, axis=0)方法。
obj.drop(‘a’) 删除一行。
df.drop([‘oh’,’te’],axis=1) 删除一列。
删除任何包含NA值的行:data.dropna()
删除一整行的值都为NA:data.dropna(how=’all’)
在一行中有多少非空值的数据是可以保留下来的(行数据中至少要有 5 个非空值):data.drop(thresh=5)
data.dropna(subset=[‘title_year’]):subset参数允许我们选择想要检查的列。如果是多个列,可以使用列名的list作为参数。如果指定列为NA,则删除这行。
resample函数
只有在index为date类型的时候才能用。
层次化索引(hierarchical indexing)
多层索引对象的索引与切片操作。
Series的操作
【重要】对于Series来说,直接中括号[]与使用.loc()完全一样,因此,推荐使用中括号索引和切片。
(1) 索引
(2) 切片
DataFrame的操作
(1) 可以直接使用列名称来进行列索引
(2) 使用行索引需要用ix(),loc()等函数
【极其重要】推荐使用loc()函数
注意在对行索引的时候,若一级行索引还有多个,对二级行索引会遇到问题!也就是说,无法直接对二级索引进行索引,必须让二级索引变成一级索引后才能对其进行索引!
唯一值、值计数、成员资格方法
- isin:计算一个表示“Series各值是否包含于传入的值序列中”的布尔型数组。
- unique:计算Series中的唯一值数组,按发现的顺序返回。
- value_counts:返回一个Series,其索引为唯一值,其值为频率,按计数值降序排列这类方法可以从一维Series的值中抽取信息。
value counts函数
value_counts还是一个顶级pandas方法,可用于任何数组或序列:pd.value_counts(obj.values, sort=False)。
参考
利用Python进行数据分析 pandas基础: Series和DataFrame的简单介绍
python pandas dataframe 行列选择,切片操作