Pandas数据结构基础

pandas的数据结构
 
  • Series是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。由一组数据即可产生最简单的Series。
Series的字符串表现形式为:索引在左边,值在右边。自动创建一个0~N-1的整数型索引,可以通过values和index属性获取其数组表示形式和索引对象。(可以传递给它的参数一维数组array或者列表
 
Series最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据
a=Series([1,2,3],index = ['one','two','three'])
obj = Series(np.arange(5.),index = ['a','b','c','d','e'])
obj.values查看元素
obj.index查看索引
赋值:选取索引
obj['a']=20 #新增列也是这样
 
ser.dropna()#过滤NaN
ser[ser.notnull()]

  • DataFrame是一个表格型的数据结构(传入的参数一般为字典/列表),含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
    axis = 0/1 0是列,1是行
 
    index是行  columns是列
   data是一个dataframe类型   data['one'] 获取列
  DataFrame的一列就是Series
 
  • 索引对象index
index的方法和属性:
append # 连接另一个index对象,产生一个新的index
diff # 计算差集,并得到一个index
intersection # 计算交集
union # 计算并集
isin # 计算一个指示各值是否都包含在参数集合中的布尔型数组
delete # 删除索引i处的元素,并得到一个新的index
drop # 删除传入的值,并得到新的index
insert # 将元素插入到索引i处,并得到新的index
dropna(how='all')删除NaN
利用fillna()方法填充缺失数据可以看做值替换的一种特殊情况,虽然map可以修改对象的数据子集,但replace提供了一种跟简单、更灵活的方式。
 
data.replace(a,'b')
data.replace(['a','c'],'b')
data.replace(['a','c'],['b','d'])
is_monotonic # 当各元素均大于等于前一个元素时,返回True
is_unique # 当index没有重复值时,返回True
unique # 计算index中唯一值得数组
value_counts()#返回各个不同的元素及出现的次数
dataframe.ix[index]#行索引
dataframe.columns.name='item' #命名
dataframe.index.name = 'id'
reindex()#重新定义索引(行或者列皆可)
Series有一个应用于元素级函数的map方法。     ??????????
frame['e'].map(format)
index对象
ser =pd.Series([5, 0, 3, 8, 4],index = ['red', 'blue', 'yellow', 'white', 'green'])
In [166]: ser                                                                    
Out[166]:
red       5
blue      0
yellow    3
white     8
green     4
dtype: int64
In [167]: ser.idxmin()         #idxmax()                                                    
Out[167]: 'blue'
#排序:
frame.sort_index() 
frame.sort_idnex(axis = 1) #根据任意轴上的索引就行排序
frame.sort_index(axis = 1,ascending = False) #数据默认是按升序排序的,也可设置降序排序
axis
* 使用0值表示沿着每一列或行标签\索引值向下执行方法
* 使用1值表示沿着每一行或者列标签模向执行对应的方法
 
def f(s):
      return x.max() -x.min()
dataframe.apply(f)
 
dataframe.describle()#计算多个统计量
排序:
dateframe.sort_index()
Series.order()#注意区别

DataFrame索引上的合并mergehttps://blog.csdn.net/weixin_37226516/article/details/64137043

pandas.merge可根据一个或多个键将不同DataFrame中的行连接起来
数据集的合并(merge)或连接(join)运算是通过一个或多个键将行链接起来的
默认情况下,merge做的是“inner”连接
merge函数的参数:
默认以重叠的列名当做连接键。inner取交集
① left # 用于合并的左侧DataFrame
② right # 用于合并的右侧DataFrame
③ how # “inner”、“outer”、“left”、‘“right”其中之一,默认为“inner”
④ on # 用于连接的列名
⑤ left_on、tight_on # 左右侧DataFrame分别指定键
⑥ left_index、right_index # 左右侧将索引用作连接键
⑦ sort# 合并后进行排序,默认为True,处理大数据时,最好禁用
⑧ suffixes # 字符串元组,用于追加到重叠列名的结尾,默认为“_x”、“_y”
⑨ copy # 默认为Flase,可以在某种特殊情况下禁用,默认总是复制。
left_index/ right_index: 如果是True的haunted以index作为对齐的key
sort:根据dataframe合并的keys按字典顺序排序,默认是,如果置false可以提高表现。

v0.17.0 版本的pandas开始还支持一个indicator的参数,如果置True的时候,输出结果会增加一列 ’ _merge’。_merge列可以取三个值

left_only 只在左表中
right_only 只在右表中
both 两个表中都有

join方法

dataframe内置的join方法是一种快速合并的方法。它默认以index作为对齐的列。
 

suffix后缀参数

如果和表合并的过程中遇到有一列两个表都同名,但是值不同,合并的时候又都想保留下来,就可以用suffixes给每个表的重复列名增加后缀。suffixes=['', ' old'])

frame1与frame2的列名不能有重合

concatenation数组的拼接
concat()按轴拼接
创建等级索引


轴向旋转stack() 列转为行


映射
map()
rename()
reindex, recolum必须是字典
inplace

split('')#以参考点为分隔符。将文本分为几部分
 

GroupBy对象支持迭代,可以产生一组二元元组(由分组名和数据块组成)groupby默认是在axis = 0上(列)进行分组的
 
df1=df.groupby('key1')                                                  
In [11]: df1                                                                     
Out[11]: <pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f912bf79518>
变量df1是一个GroupBy对象,它实际上还没有进行任何计算,只是含有一些有关分组键df['key1']的中间数据而已,然后我们可以调用GroupBy的mean等方法来计算分组平均值:
 
dataframe.groupby('A').mean()   按A列进行分组 获取其他列的均值
dataframe.agg() 对不同的列采用不同的聚合方法(函数)
data.agg({'B':'mean','C':'sum'})    #B列均值,C列汇总
 

高级数据聚合transform   apply
*如果按照A进行分组后,对多列采用相同的聚合方法( 对DataFrame的多个列同时进行运算),我们可以借助apply函数:(将函数的返回结果组合起来)
dataframe.groupby('A').apply(np.mean)
 apply将函数应用到由各列或行形成的一维数组上--------对应pd.Series,Series是一维标记的数组,能够保存任何数据类型(整数,字符串,浮点数,Python对象等)
 
 

1.transform  传入的函数只能返回两种结果,可以广播的标量值或者与分组大小相同的结果数组。

例子:对分组求均值,然后把这个均值赋值给整个组(可广播的标量值)


pandas
读CSV文件
1.read_csv(filename)
read_csv(filename,header=None)#默认添加表头
read_csv(filename, name=)#指定表头
2.read_table(filename, sep=)
 

 astype
astype(str) #数据类型转换
 

DataFrame.to_dict(orient='dict')
将DataFrame格式的数据转化成字典形式
参数:当然参数orient可以是字符串{'dict', 'list', 'series', 'split', 'records', 'index'}中的任意一种来决定字典中值的类型
字典dict(默认):类似于{列:{索引:值}}这样格式的字典
列表list:类似于{列:[值]}这种形式的字典
序列series:类似于{列:序列(值)}这种形式的字典
分解split:类似于{索引:[索引],列:[列],数据:[值]}这种形式的字典
记录records:类似于[{列:值},...,{列:值}]这种形式的列表
索引index:类似于{索引:{列:值}}这种形式的字典
在新版本0.17.0中,允许缩写,s表示序列,sp表示分裂
返回:结果:像{列:{索引:值}}这种形式的字典
 
 
posted @ 2019-04-10 17:12  YEA大木南  阅读(114)  评论(0编辑  收藏  举报