码迷,mamicode.com
首页 > 其他好文 > 详细

pandas 小介

时间:2018-08-28 12:11:19      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:dataframe   用户名   ESS   而不是   taf   user   结果   ddd   创建   

参考文档 http://pandas.pydata.org/pandas-docs/version/0.20/

 

pandas的功能非常强大,支持类似与sql的数据增、删、查、改,并且带有丰富的数据处理函数;

支持时间序列分析功能;支持灵活处理缺失数据等。

    pandas的基本数据结构是Series和DataFrame。

Series是序列,类似一维数组;DataFrame相当于一张二维表格,类似二维数组,它的每一列都是

一个Series。 为了定位Series中的元素,Pandas提供了Index对象,每个Series都会带有一个对应的

Index,用来标记不同的元素,Index的内容不一定是数字,也可以是字母、中文等,它类似于sql中的

主键。

    DataFrame相当于多个带有同样Index的Series的组合(本质是Series的容器),每个Series都带

有唯一的表头,用来标识不同的Series。

>>> import pandas as pd 

>>> s=pd.Series([1,2,3],index=[‘a‘,‘b‘,‘c‘])

>>> s

a    1

b    2

c    3

>>> d=pd.DataFrame([[1,2,3],[4,5,6]],columns=[‘a‘,‘b‘,‘c‘])

>>> d.head()

   a  b  c

0  1  2  3

1  4  5  6

>>> d.describe()

             a        b        c

count  2.00000  2.00000  2.00000

mean   2.50000  3.50000  4.50000

std    2.12132  2.12132  2.12132

min    1.00000  2.00000  3.00000

25%    1.75000  2.75000  3.75000

50%    2.50000  3.50000  4.50000

75%    3.25000  4.25000  5.25000

max    4.00000  5.00000  6.00000

>>> pd.read_excel(‘C:\\Users\someone\Desktop\data.xlsx‘,‘Sheet1‘)

               id       int  no    4       5         6   7    8

0       elec_code   varchar  no   50    电子表码   varchar  no  100

1         user_id   varchar  no   50    用户编号   varchar  no  100

2       user_name   varchar  no   50    用户名称   varchar  no  100

 

写入excel

with pd.ExcelWriter(‘shanghai_%d.xlsx‘%iii) as writer:

    for i,j in dddit:

        j.to_excel(writer,sheet_name=str(i))

#j 为DataFrame类型数据

定位dataframe中元素

d=pd.DataFrame([[1,2,3],[4,5,6]],columns=[‘a‘,‘b‘,‘c‘])

定位行的数据  建议用 d.loc[1:2],与列表切片不同的是,这个会返回第一行和第二行的数据 

定位列的数据 d[‘a‘,‘b‘]

删除 B列的数据  del d[‘b‘]

取某个数据 d.loc[1:2,[‘b‘,‘c‘]]   取索引为1,列号为‘b‘,‘c‘的数据

d.iloc[1:2,[1,2]] 根具数据的序号,取数据,而不是索引的值

d.index 返回索引明细

d.dtypes 返回各列(column)的类型及名称

 

填充空值

d=d.fillna(‘_‘)将NA以‘_‘值替换

 

合并DataFrame

 

merge 原理像sql 的两表关联 join

pd1=pd.DataFrame(list1,columns=[‘userid‘,])

pd2=pd.DataFrame(list2,columns=[‘r‘,‘userid2‘,‘filialename‘,‘username‘,‘useraddress‘,])

pd3=pd.merge(pd1,pd2,how=‘left‘,left_on=‘userid‘,right_on=‘userid2‘)

how,连接方式‘left‘,‘right‘,‘inner‘

使用左边的userid列和右边的userid2列作为连接键即userid=userid2

想根据某列的不同的值,创建出另一对应值的列,可用merge方法,连接两个df

 

concat 直接拼接合并

dfs=[pd1,pd2,pd3]

datas=pd.concat(dfs,axis=1)

axis为1时,横向连接 datas.columns  为 [‘userid‘,‘r‘,‘userid2‘,‘filialename‘,‘username‘,‘useraddress‘,‘userid‘,‘r‘,‘userid2‘,‘filialename‘,‘username‘,‘useraddress‘,]

axis为0时,纵向连接 相当于union all

 

根据某列的值排序

df.sort_values(by=[‘counts‘])

 

获得某列值出现的频率数

s=datas[‘filialename‘]

s.value_counts()

 

groupby,分组

类似sql的group by ,可以根据多个字段group by ,用列表

grouped=data.groupby(‘Fmfiliale‘)

#默认是 axis=0,即纵向分组

print(grouped.groups)

#结果如下:

#{‘118.190.41.176:water‘: Int64Index([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,

#            17, 18, 19, 20, 21, 22, 23, 24],

#            dtype=‘int64‘),

# ‘120.237.48.43:water‘: Int64Index([25], dtype=‘int64‘),

# ‘222.245.76.42:water‘: Int64Index([26, 27, 28, 29], dtype=‘int64‘)}

for name,group in grouped:

 print(name,grouped)

返回的是(str,pd)类型数据,上例中的name值为改组的Fmfiliale值。

 

对于空值(#NA)groupby会自动排除这一条数据

pandas 小介

标签:dataframe   用户名   ESS   而不是   taf   user   结果   ddd   创建   

原文地址:https://www.cnblogs.com/Ting-light/p/9547316.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!