标签:数组 改变 大小 strong 序列 不同 领域 工程 data
在学习了Numpy后,进行数据科学计算,为何还要使用Pandas呢?其实原因就是效率高,那为何Pandas效率比numpy要高呢?其实Pandas和Numpy还是有着很大的关系的,Pandas本身是依赖numpy的,而ndarray在内存里占据这一段连续的内存空间,任何改变ndarray长度的操作都势必让所有value改变内存中的位置因此在某种程度上,Numpy操作效率还是比较慢的。但是Pandas并不是处理所有的数据都是效率很高的,那么一般情况下处理以下的数据比较友好:
Series:类似于一维数组的对象,由一组数据以及一组相关的数据标签组成的数据结构。可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。
获取索引对象——obj.index
eg:
# 第一种创建series的方式:
s1 = pd.Series([1,2,3,4,5,6,7,8,9])
print(s1)
print(s1.values) # series的值
print(s1.index) # 索引信息
# 第二种创建series方式:
s2 = pd.Series(np.arange(10))
print(s2)
# 第三种通过字典的方式创建series:
s3 = pd.Series({"cecilia":90,'cc':89,'abc':97})
print(s3)
print(s3.index)
s4 = pd.Series(s1.to_dict()) # 转字典
print(s4)
s5 = pd.isnull(s3)
s5.index.name = "name score" # 给列名添加名称
print(s5)
通过索引存取元素
>>>obj2 = pd.Series([4, 7,-5,3], index=['d','b','a','c']) #还能自定义index进行创建Series
>>>obj2
d 4
b 7
a -5
c 3
dtype: int64
>>> obj2.index
Index([u'd', u'b', u'a', u'c'], dtype='object')
## 通过索引存取元素和修改元素值
>>>obj2['d']= 6 # 修改index='d'的索引值
d 6
b 7
a -5
c 3
dtype: int64
>>>obj2[['c','a','d']] ## 选取index='c' 'a' 'd'的元素值
c 3
a -5
d 6
dtype: int64
## 按照索引条件获取元素
>>>obj2[obj2>0]
d 6
b 7
c 3
dtype: int64
DataFrame:是一个table型数据,包含一组有序的列,每列可以是不同的值类型,DataFrame既有行索引也有列索引,可以看作是由Series组成的字典。dataFrame中的数据是以一个或者多个二维块存放的,而不是列表、字典等。
创建DataFrame
eg:
>>> data = {'a':[1,2,3],
'b':[4,5,6],
'c':[7,8,9]}
>>> df = pd.DataFrame(data)
>>> print(df)
a b c
0 1 4 7
1 2 5 8
2 3 6 9
注意:结果DataFrame会自动加上索引(跟Series一样),且全部列会被有序悱列!!!
## 如果指定了列序列,则DataFrame的列就会按照指定顺序迸行排列,如果指定的列不存在,那么结果是一个空的dataframe
>>>pd.DataFrame(data, columns=['b', 'a', 'c'])
b a c
0 4 1 7
1 5 2 8
2 6 3 9
存取元素(其实是一个Series)
注意:
## 通过字典标记或者属性来获取Series
>>> data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year':[2000, 2001, 2002, 2001, 2002],
'pop':[1.5, 1.7, 3.6, 2.4, 2.9]}
>>> df= pd.DataFrame(data, columns=['year', 'state', 'pop'])
>>> print(df['state'])
0 Ohio
1 Ohio
2 Ohio
3 Nevada
4 Nevada
Name: state, dtype: object
ix、loc、iloc
ix——可以通过行号索引,也可以通过行标签索引(从pandas 0.20.0版本开始,官方不推荐使用.ix方法,而是使用.iloc 和.loc方法)
loc——loc[‘d’]表示索引的是第’d’行(index 是字符)通过行标签索引行数据,也可以索引某行某列
iloc——通过行号获取行数据或者多行数据,但是通过行标签获取会报错
## 承接上面的df
>> print(df.loc[1]) # 选取第一行的数据
state Ohio
year 2001
pop 1.7
Name: 1, dtype: object
>> print(df.loc[0:2]) # 选取index=0到index=2行的数据,总共三行数据
state year pop
0 Ohio 2000 1.5
1 Ohio 2001 1.7
2 Ohio 2002 3.6
## 可以锁定行,按照特征属性多列选取元素
>> num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']
>> bar_heights = norm_data.loc[0, num_cols].values
>> print(bar_heights)
[4.3 3.55 3.9 4.5 5.0]
## 重置索引index,通过行号获取数据
>> df.reset_index(inplace=True)
>> df.head()
>> print(df.iloc[2:4]) # 获取第2行、第3行数据
index state year pop
2 2 Ohio 2002 3.6
3 3 Nevada 2001 2.4
重建索引——reindex()函数:将会根据新索引进行重排。如果某个索引值当前不存在,就引入缺失值,可以采用填充的方式处理缺失值
有几种参数:
参数 说明
index 用作索引的新序列。既可以是index实例,也
可以是其他序列型的Python数据结构。Index
会被完全使用,就像没有任何复制一样。
method 插值(填充)方式。
fill_value 在重新索引的过程中,需要引入缺失值时使用
的替代值 .
limit 前向或后向填充时的最大填充量.
level 在Multiindex的指定级别上匹配简单索引,否
则选取其子集
copy 默认为True,无论如何都复制;如果为False,
则新旧相等就不复制
其中method方法的参数如下:
参数 说明
ffill或pad 前向填充(或搬运)值
bfill或backfill 后向填充(或搬运)值
fill_value=0,直接填充0
apply函数——将函数应用到由各列或行所形成的一维数组上,比如sum和mean等
eg:
# 将求最大值和最小值之间的差得函数运用在某一轴上
>>>f = lambda x: x.max() - x.min()
>>>frame.apply(f)
>>>frame.apply(f, axis=1)
排名和排序
eg:
>>>frame = DataFrame(np.arange(8).reshape((2, 4)),
index=['three', 'one'], columns=['d','a','b','c'])
>>>frame.sort_index()
>>>frame.sort_index(axis=1)
## 默认的是升序排列,但也可以降序排列
>>>frame.sort_index(axis=1, ascending=False)
## 根据一个或多个列觉得值进行排序,采用**by选项**
>>>frame.sort_index(by=['three', 'one'])
## 如要按照值对Series 进行排序,那么可以order
>>>obj = Series([4, 7, -3, 2])
>>>obj.order()
2 -3
3 2
0 4
1 7
>>>obj = Series([4, np.nan, 1, np.nan, -3, 2])
>>>obj.order() #在排序时,缺失值默认都会被放到Series的末尾.
4 -3
2 1
5 2
0 4
1 NaN
NaN
注意:排名(Series.rank(method=‘average‘,ascending=True))的作用与排序的不同之处在于,他会把对象的values替换成名次(从1 到 n)。这时唯一的问题在于如何处理平级项,方法里的 method 参数就是起这个作用的,他有四个值可选:average,min, max, first。
汇总与统计
去除
填充
标签:数组 改变 大小 strong 序列 不同 领域 工程 data
原文地址:https://www.cnblogs.com/cecilia-2019/p/11368226.html