阿佐数据分析python小抄【pandas基础数据处理】

导入库

# coding: utf-8
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
import time
import os
import datetime

# 显示所有行列
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

Pandas 数据导入导出

# 数据导入导出
pwd = os.getcwd() #获取当前路径
os.chdir(r"文件路径")
df = pd.read_csv('file_name.csv')
df = pd.read_csv('file_name.csv',encoding='gbk',index_col=None,sep=',') #文档中有中文

df.to_csv('name_of_df.csv')

# 创建一个新的data frame的方法
dict_1 = {"a":[1,2,3];b":[5,6,7]} 
df1 = pd.DataFrame(dict_1,index = [1,3,2])

npdata = np.random.randn(4, 5)
df2 = pd.DataFrame(npdata,columns=['a','b','c','d','e'])

数据预览

df
df.shape()
df.info()
df.ndim()
df.head() 
df.tail()
df.columns()
df.rows()
df.describe() #统计数据查看

df['col_name'].quantile(0.01) # 查看下0.01分位点

# 显示所有行列
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)


Dataframe 基础操作

# 重命名列
df = df.rename(columns = {'col':'new_col'})

# 删除列
df.drop('a',axis=1)

#重置index
df.reset_index()

数据清理——替换,去重,哑变量

在这里插入图片描述

data["col_name"]=data["col_name"].fillna(5) # 用5填充为nan的值

camp['dup'] = camp.duplicated() # 生成重复标识变量
camp_dup = camp[camp['dup'] == True] # 把有重复的数据保存出来,以备核查
camp_nodup = camp[camp['dup'] == False] # 注意与camp.drop_duplicates()的区别
df.drop_duplicates()

df.score.replace(999,np.nan)
df.replace({'score':{999:np.nan},'name':{'Bob':np.nan}})

# 均值填补空缺值
vmean = df['Age'].mean(axis=0, skipna=True)
df['Age_empflag'] = df['Age'].isnull()
df['Age']= df['Age'].fillna(vmean) 

# 创新新的计算列
df['col1'] =df['a'] - df['b']
ndf=df.assign(col2 =  df['a'] - df['b'],col3 = df['a'] + df['b'])

#自定义函数创建新的列
def transform(row):
    if row['column_name'] == 1:
        return ('class1')
    elif row['column_name'] == 2:
        return ('class2')  
sample.apply(transform,axis=1) 
sample.assign(new_column_name = sample.apply(transform,axis=1))
sample.loc[sample.column_name==1,'new_column_name']='class1'
sample.loc[sample.column_name==2,'new_column_name']='class2'

 #盖帽法处理数据
def blk(floor, root): 
    def f(x):       
        if x < floor:
            x = floor
        elif x > root:
            x = root
        return x
    return f
q1 = camp['Age'].quantile(0.01) 
q99 = camp['Age'].quantile(0.99)
blk_tot = blk(floor=q1, root=q99) # 'blk_tot' is a function
camp['Age']= camp['Age'].map(blk_tot) 

# 数据值的变量替换处理,新标签创建
district_dict = {'fengtai':'丰台区','haidian':'海淀区','chaoyang':'朝阳区','dongcheng':'东城区','xicheng':'西城区','shijingshan':'石景山区'}
df['district'] = df.dist.map(district_dict)

# - 分箱法——等宽分箱
camp['Age_group1'] = pd.qcut( camp['Age'], 4) # 这里以age_oldest_tr字段等宽分为4段
# - 分箱法——等深分箱
camp['Age_group2'] = pd.cut( camp['Age'], 4) # 这里以age_oldest_tr字段等宽分为4段


数据汇总

# 单维度变量
snd['district'].value_counts()
snd['dist'].value_counts().plot(kind = 'bar')
snd['dist'].value_counts().plot(kind = 'pie')
sample.sort_values('score',ascending=False,na_position='last')
sample.sort_values(['group','score'])

# 单数值变量
snd.price.hist(bins=40)
plt.hist(snd['price'], bins=20, normed=True,range=(df.price.min(),df.price.max()))#指定绘图的值域
snd.price.quantile([0.01,0.5,0.99])
snd.price.mean()
snd.price.agg(['mean','median','sum','std','skew'])

# 双维度变量
df = pd.crosstab(snd.dist,snd.school)
pd.crosstab(snd.dist,snd.school).plot(kind='bar')
pd.crosstab(snd.dist,snd.school).plot(kind='bar',stacked=True)
pd.melt(table1,id_vars='cust_id',value_vars=['Normal','Special_offer'],value_name='Monetary',var_name='TYPE')
  # 将交叉表变为分组汇总表 id_vars 为主变量,value_vars为要变为分组的汇总列,value_name 变为汇总值的列名,var_name为分组变量名的列名	

sub_df=pd.crosstab(snd.dist,snd.school)
sub_df['sum1']=sub_df.sum(1)
sub_df = sub_df.div(sub_df.sum1,axis=0)
sub_df.drop('sum1',axis=1)
sub_df[[0,1]].plot(kind='bar',stacked=True) # 标准化堆叠图

from stack2dim import *
stack2dim(snd,i='dist',j='school') #粗细会变的堆叠图

# 维度变量+数值变量
snd.price.groupby(snd.dist).mean()
snd.price.groupby(snd.dist).mean().sort_values(ascending = True).plot(kind='barh')
sns.boxplot(x =  'dist',y='price',data=snd)
sample.groupby(['grade','class'])[['math']].mean()
sample.groupby(['grade'])['math','chinese'].mean()
sample.groupby('class')['math'].agg(['mean','min','max'])

# 透视表分析
snd.pivot_table(values='price',index='district',columns='subway',aggfunc=np.mean).plot(kind='bar')

数据切片

sample['a']
sample.ix[:,'a']
sample[['a']]
sample.ix[0:2, 0:2]

sample[sample.score > 70]
sample[(sample.score > 70) & (sample.group ==1)]
sample.query('(group ==2) |(group == 1)')
sample[sample['score'].between(70,80,inclusive=True)]
sample[sample['name'].isin(['Bob','Lindy'])]
sample[sample['name'].str.contains('[M]+')]

ndf = df[df.A>df.B][df.A<df.B+datetime.timedelta(days=365)]

时间处理

data['time'] = pd.to_datetime(data['time'],format='%Y-%m-%d %H:%M:%S')
data["weekday"]=data["time"].dt.weekday
data["year"]=data["time"].dt.year
data["quarter"]=data["time"].dt.quarter
data["hour"]=data["time"].dt.hour
data["month"]=data["time"].dt.month


  • 时间窗口处理内容待补

单行数据处理

data["new_col"]=data["ori_col"].map(fun_name)

lambda x:3 if x==-8 else x
lambda x:x-1
lambda x:0 if pd.isnull(x)  else 1 # 若为空则为0 不为空为1

正确的赋值操作

data.loc[(data['A']==5),'C']='是'
data.loc[(data['A'].str.contains('团队')) & (data['B']>=40),'C']='是'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
我个人认为最好用的话单分析软件,推荐给大家。 以下是网上得来的简介: 中谦(七星)话单分析软件”(Seven Star System,简称“3S”)系列软件是在全国工作“信息化、情报化”的大背景下产生的,其实现话单分析从原始的单一表格化直接上升至集图形化、关系化、关联化、海量化等多种展示方式于一身的可视化展示方式,并且包含了适用于内网网络版、互联网单机版及安卓手机版等多种应用场境下使用,极大地提高办案人员的工作效率。 现代生活的通讯资讯日渐发达,移动成了人们生活必不可少的工具,多数犯罪分子在作案的预谋、作案过程中都不同程度使用了移动,通话清单的分析为我们的侦查破案提供了排查嫌疑人的条件。但是从成千上万条的数字数据中分析出嫌疑人的生活、活动轨迹、人等情况,却不是人力所不能及的。 “七星话单分析”软件,可以对涉案的移动、联通、电信CDMA三类号码的实时通话清单进行最深层次的分析,内容涵盖了通话次数时长分析、活动轨迹分析、相互通话分析、共同人分析、居住地分析、同路人分析、出现或消失号码分析等,并独创了话单24小时时段通话折线统计图,使得通话规律情况以非常直观的方式表示出来。在相互通话分析、共同人分析、出现或消失号码分析中,均以直观的图形方式将通话关系表现出来,使人一目了然,当然还有许多小的、人性化的功能,比如指定时间段功能、不同界面上的搜索功能、对方通话所在地功能等。一直以来在话单分析中的基站位置数据识别是个大难题,在“七星话单分析”软件中增加了移动、联通通话基站地图定位功能模块,在分析居住地中增加了地图分析功能,直接在地图上可以分析查看嫌疑人的位置,为确定及抓捕嫌疑人提供较为充足的条件,在活动轨迹模块中,增加了单轨迹、多轨迹的电子地图显示功能,更有设计完好的单、多轨迹图表统计功能,最大限度地将分析对象的活动轨迹明了展现在分析人员面前,为办案人员提供最客观、最直接的参考信息。完美的解决了话单分析中基站位置数据识别的难题。办案人员只要通过简单的操作,就可将通话清单中包含的各种信息一览无余,为侦查破案提供了客观的依据。 特点: 1、便捷的话单导入功能 2、直观的可视化图形界面 3、强大的电子地图轨迹分析功能 4、高效的分布式数据存储方式 5、灵活的数据关联设计

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值