Pandas基于两种数据类型 series 和 dataframe
series
series 是一种一维数据类型,每个元素都带有各自的标签(相比较于numpy增加了标签这一概念,标签可以是数字也可以是字符)
dataframe
dataframe是一种二维的数据结构(表格型),每个轴都要标签,相当于series的扩展
一些操作
data.head()
# 输出前五行
data.head(10)
# 输出前10行
data.tail()
# 输出后5行
查找
通常使用列的名字在pandas中查找列
data['collect_time'],得到的是一个series(因此dataframe相当于series的字典)
可以修改列的名字,方便使用
data.columns = ['a','b','c']
长度
len(data) 可以返回数据行数(总共多少条纪录)
若想要知道一些数据集的基本统计数据,也可以直接简单实现
过滤
- 根据一些条件进行筛选过滤
data[data['key_word_1']>5]
# 对于整个表格,根据key_word_1这一列的数据,只保留其大于5的部分
也可以使用复合条件表达式
但是只能用&(()&()),不能使用and
2.对于字符串的过滤
可以通过:
data[data['time'].str.startwith('199')]
来进行过滤,不能直接对字符串操作
行索引
如果行标签是数字型的,可以通过iloc来索引
data.iloc[30]
iloc只对数字标签有用
对于字符标签,可以使用loc
data.loc['2000/01']
排序
将索引排序,sort_index
ascending = False:降序
默认为升序
data.sort_index(ascending=False)
将排序后的dataframe恢复:reset_index
data = data.reset_index('water_year')
# 根据water_year恢复
对数据集进行操作,使其应用某个函数
- 对某一列应用函数:apply
- 对整个数据集应用函数:applymap
函数不用带参数
data['year'] = data['water_year'].apply(function)
# 只对data中的‘water_year’列应用了function函数,并赋给了‘year’列
两个dataframe合并-->merge
data_new = data.merge(data_1, on = 'year')
关键字on指定需要合并的列
isna-->判断是否为NAN
data['time'].isna()
# 返回series,若为NAN,则返回True;否则返回False
求和 sum
data.sum() # 每列求和
data.sum(1) # 行求和
data.apply(lambda x:x*2) # 将每个元素*2
筛选数据 --> isin([])
data.E.isin(['a','c'])
# 根据第E列中属于['a','c']的部分进行输出
isin的反函数
前面加上~(取非)
唯一值(去重)-->unique()
data.unique()
# 返回去重之后的array
删除-->drop()
data.drop([1])
data.drop(['time'],axis = 1)
# 删除列时要加上axis= 1
按列删除na行-->dropna(subset=['time'])
将‘time’列数值为na的行删除
列的移动
>>>time = data.pop('time)
>>>data.insert(4,'time',time)
# 先删除后插入
在指定位置插入列
>>>data.insert(0, 'time', time)
插入行
无法直接在指定位置上插入行
TODO:
drop_duplicates:去掉重复项
分片
# 按照time分片
>>>time_list = data['time'].unique() # 找到所有time的不重复项
>>>data0 = data[ data['time'].isin([time_list [0]]) ]