python-pandas总结

1 字段转series

import pandas as pd
series=pd.Series({'a':1,'b':2,'c':3})
这样用字典方式构建了Series数据类型,为了将索引‘abc’提取出来并形成三维的列表,采用这种方式:
ix=list(series.index)
index方法获得index对象,可以直接用list函数转换为列表
print(ix)
可以获得结果:
['a', 'b', 'c'] 

2 去重、删除行、列

import pandas as pd  
filepath="C:/Users/yangge/Desktop/故障预测/设备资源环境数据2.xlsx"
df = pd.read_excel(filepath)#,low_memory=False
didDR=df.drop_duplicates(subset=['did'],keep='first',inplace=False)
didList=list(didDR['did'])

#subset对应的值是列名,表示只考虑这两列,将这两列对应值相同的行进行去重。默认值为subset=None表示考虑所有列。
#keep='first'表示保留第一次出现的重复行,是默认值。keep另外两个取值为"last"和False,分别表示保留最后一次出现的重复行和去除所有重复行。
#inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。
df.drop('indexNum',inplace=True)#删除行
df.drop('key1',axis=1,inplace=True)#删除列

3 条件匹配

data=df.loc[df['did']==didList[i],['did','ts','cpu','mem','mac','arp']]#单条件
nowDayData=df.loc[(df['ts']<nowDayEndTs)&(df['ts']>=nowDayStartTs),['ts','cpu']]#双条件

4 重置index

df1 = df1.reset_index(drop=True)#重置index

5 dataframe合并

data=pd.concat((data,dataPart))

6 排序 

# /usr/bin/python
# -*- coding: utf-8 -*-
# 导入依赖包pandas
import pandas as pd
# 读入数据
dat = pd.read_csv('data.txt', 'r')
# 单列排序
# 使用sort,默认是升序,所以下面的两个方法等价
dat.sort(["column1"])
dat.sort(["column1"], ascending=True)
# 单列降序
dat.sort(["column1"], ascending=False)
# 多列升序
dat.sort(["column1", "column2"])
dat.sort(["column1", "column2"], ascending=True)
# 多列降序
dat.sort(["column1", "column2"], ascending=False)

7 按指定字符分割字段

data["dH"],data['a'],data['b'],data['c']=data["ts"].str.split(':').str

8 替换

#方式1
df.sex[df['sex']=='f']=0
#方式2
df.loc[df['sex']=='f',['sex']]=0#单条件
df.loc[(df['sex']=='f')&(df['age']<20),['sex']]=0#多条件

9 分组查询groupby

(1)按列分组

group1 = df.groupby('key1')#按单列分组
group2 = df.groupby(['key1','key2'])#按多列分组
group2
#[Out]# <pandas.core.groupby.DataFrameGroupBy object at 0x0000000009CB4128>

 (2)显示分组内容

[x for x in group1]
#[Out]# [('a',       data1     data2 key1 key2
#[Out]#   0  0.439801  1.582861    a  one
#[Out]#   1 -1.388267 -0.603653    a  two
#[Out]#   4  2.169966  0.074715    a  one), 
#[Out]#  ('b',       data1     data2 key1 key2
#[Out]#   2 -0.514400 -0.826736    b  one
#[Out]#   3 -1.487224 -0.192404    b  two)]

(3)分组统计

在分组group1、group2上应用size()、sum()、count()等统计函数,能分别统计分组数量、不同列的分组和、不同列的分组数量。

group1.size()
#[Out]# key1
#[Out]# a    3
#[Out]# b    2
#[Out]# dtype: int64
group1.sum()
#[Out]#          data1     data2
#[Out]# key1                    
#[Out]# a     1.221499  1.053922
#[Out]# b    -2.001624 -1.019140
group2.size()
#[Out]# key1  key2
#[Out]# a     one     2
#[Out]#       two     1
#[Out]# b     one     1
#[Out]#       two     1
#[Out]# dtype: int64
group2.count()
#[Out]#            data1  data2
#[Out]# key1 key2              
#[Out]# a    one       2      2
#[Out]#      two       1      1
#[Out]# b    one       1      1
#[Out]#      two       1      1

(3)应用agg()

对于分组的某一列或者多个列,应用agg(func)可以对分组后的数据应用func函数。例如:用group1['data1'].agg('mean')对分组后的’data1’列求均值。当然也可以推广到同时作用于多个列和使用多个函数上。

group1['data1'].agg('mean')
#[Out]# key1
#[Out]# a    0.407166
#[Out]# b   -1.000812
#[Out]# Name: data1, dtype: float64
group1['data1'].agg(['mean','sum'])
#[Out]#           mean       sum
#[Out]# key1                    
#[Out]# a     0.407166  1.221499
#[Out]# b    -1.000812 -2.001624
group1['data1','data2'].agg(['mean','sum'])
#[Out]#          data1               data2          
#[Out]#           mean       sum      mean       sum
#[Out]# key1                                        
#[Out]# a     0.407166  1.221499  0.351307  1.053922
#[Out]# b    -1.000812 -2.001624 -0.509570 -1.019140

 (4)应用apply()

apply()不同于agg()的地方在于:前者应用于dataframe的各个列,后者仅作用于指定的列。

df.groupby('key1').apply(mean)
#[Out]#          data1     data2
#[Out]# key1                    
#[Out]# a     0.407166  0.351307
#[Out]# b    -1.000812 -0.509570
df.groupby(['key1','key2']).apply(mean)
#[Out]#               data1     data2
#[Out]# key1 key2                    
#[Out]# a    one   1.304883  0.828788
#[Out]#      two  -1.388267 -0.603653
#[Out]# b    one  -0.514400 -0.826736
#[Out]#      two  -1.487224 -0.192404

 10 透视表pivot_table

可以产生类似于excel数据透视表的结果,相当的直观。

1)分组统计

其中参数index指定“行”键,columns指定“列”键,根据values统计,不设aggfunc默认平均值,要求和用aggfunc='np.sum',计数用aggfunc=len,一起弄用aggfunc=[np.sum,len]

pd.pivot_table(df, index='key1', columns='key2',values='key3',aggfunc=len)

 行索引为‘产地’,列索引为‘类别’,对‘价格’应用‘max’函数,并提供分项统计,缺失值填充0

df.pivot_table('价格',index='产地',columns='类别',aggfunc='max',margins=True,fill_value=0)

 2)分项汇总

如果将参数margins设置为True,则可以得到分项总计数据。

df.pivot_table(index='key1',columns='key2', margins=True)
#[Out]#          data1                         data2                    
#[Out]# key2       one       two       All       one       two       All
#[Out]# key1                                                            
#[Out]# a     1.304883 -1.388267  0.407166  0.828788 -0.603653  0.351307
#[Out]# b    -0.514400 -1.487224 -1.000812 -0.826736 -0.192404 -0.509570
#[Out]# All   0.698455 -1.437746 -0.156025  0.276947 -0.398029  0.006956

11 交叉表crosstab 

交叉表是用于统计分组频率的特殊透视表

pd.crosstab(df.key1,df.key2, margins=True)
#[Out]# key2  one  two  All
#[Out]# key1               
#[Out]# a       2    1    3
#[Out]# b       1    1    2
#[Out]# All     3    2    5

12  修改列名

使用df.rename(), 注意如果df中有多个old_name列的话都会被一并重命名为new_name

df=df.rename(columns = {'old_name':'new_name'})

13 改index 

把某列设为index,原index会被删除

#方式1
dataDf= dataDf.set_index('column_name')

#方式2
dataDf.index= dataDf['column_name']

#方式3,以0开始的递增整数列,原index会变成一个新的列
dataDf = dataDf.reset_index()
#如果不需要原来的index中的值可以加drop = True
dataDf = dataDf.reset_index(drop = True)

14  筛选多个列

required_key = ['User_ID','SEO visits','SEA visits','Conversion Rate']
dataDf = dataDf[dataDf['METRIC_KEY'].isin(required_key)]

https://www.bbsmax.com/A/QW5YWa7qzm/ Pandas数据特征分析

https://blog.csdn.net/qq_22073849/article/details/62888262  利用Pandas进行数据分析(3)——统计、处理缺失值、层次化索引

发布了45 篇原创文章 · 获赞 94 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_23860475/article/details/81361016