pandas 小介

参考文档 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会自动排除这一条数据

猜你喜欢

转载自www.cnblogs.com/Ting-light/p/9547316.html