pandas数据分析航空公司数据

这篇博客介绍了如何利用pandas进行数据处理,包括数据读取、观察、筛选、清洗,以及实战部分的KMeans聚类分析。重点讲述了dataframe的使用,如数据筛选、查重去空、数据格式转换,并在实战中通过飞行时间计算飞行距离,对航空公司的数据进行聚类以生成用户标签。
摘要由CSDN通过智能技术生成

pandas数据分析

pandas主要有两种数据结构,分别是dataframe和series,本次我们主要讲述的是dataframe的简单应用,从数据的读取到清洗。

数据读取与观察

  • 1.pandas读取文件的方法很多,其中read_csv()最为常用,相对应的就有to_csv()方法(df调用)
  • 2.数据的观察:
    • 2.1 dataframe中,类型主要有
    • 2.2 head(),tail():显示df的前n个记录(默认是5),显示包括列名。
    • 2.2 info(),describe(),columns:显示df的全部信息,描述,还有列名。需要注意的是,describe()只能生成对数字的描述,Object类型无法统计描述
    • 2.4 索引:在dataframe中不能够像Numpy那样直接通过df[i]来进行索引,需要通过df[i:j]来索引具体某几行(切片操作),或者索引某一列df['column_name'].values来返回某一列的数值
    • 2.5 切片:切片可以通过直接df[i:j]来实现行切片,返回第i:j-1行,也可以通过.iloc来切片或者重写覆盖(用法如下)
import csv
import pandas
import numpy as np
import sklearn
import re
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import matplotlib
%matplotlib inline
f = open("机票综合查询.csv")
data = pandas.read_csv(f,encoding='utf-8')
data.head()
data.tail()
print(data.index)   ## 能够返回整张表中的记录数
data.info()    ## info() 显示数据表的基本信息
print(data.describe().T)   ## 描述统计(基于数字)
data[0:2]       ## 返回0:2的共2行记录(切片)
print(data.iloc[0:3,[1,3]])  #获取1列3列的1~3行数据
#data.iloc[0:3,[1,3]]=2       ## 把2写到选择的位置,起到覆盖作用
passages = data["乘机人"].values   ## 通过values把返回的series变成numpyde的ndarray形式
data.columns
RangeIndex(start=0, stop=125011, step=1)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 125011 entries, 0 to 125010
Data columns (total 7 columns):
乘机人        124861 non-null object
航程         124861 non-null object
支付科目       118861 non-null object
票面_折扣      124683 non-null float64
票面_起飞时间    124861 non-null object
票面_降落时间    124861 non-null object
票面_舱位      125011 non-null object
dtypes: float64(1), object(6)
memory usage: 6.7+ MB
          count      mean       std  min  25%    50%    75%  max
票面_折扣  124683.0  0.535882  0.358774  0.0  0.3  0.503  0.798  5.0
      航程  票面_折扣
0  成都-南京  0.485
1  西宁-广州  0.301
2  广州-西宁  0.380

Index(['乘机人', '航程', '支付科目', '票面_折扣', '票面_起飞时间', '票面_降落时间', '票面_舱位'], dtype='object')
3.数据筛选:
  • 3.1精确筛选:通过isin方法来筛选指定信息。
  • 3.2模糊筛选:通过正则表达式来进行匹配
chose = ["成都-南京","西宁-广州"]
result = data["航程"].isin(chose) #将要过滤的数据放入list中,使用isin对数据进行筛选,返回行索引以及每行筛选的结果,若匹配则返回ture
data[result]  ## 通过上面返回的true和false值来选出实际的行

## 模糊搜索:
result = data["航程"].str.contains(r'-南京$')   ## 通过正则表达来实现模糊匹配
data[result]

数据清洗:

数据清洗包括查重、去空、填充、删除、替换等操作,以下是相关函数的用法:

1.查重,去空,填充,删除,补行

在这里需要注意的是经过删除操作之后,会出现空行,每一行并不会自动补上,导致实际长度小于序号(序号为开始处理前的样子),需要用到reset_index()方法来重新排序.

## 把为空的数据删掉或填上默认值
data.fillna(np.nan) ## fillna("some") 以“some”来填充空值(null)
data = data.dropna(axis=0, how='any')        ## 丢弃空值的行
#data.drop("航程",axis=1)     ## 在列方向(axis),删除“航程”这一列
data["航程"]
## 查重:
data["航程"].unique()   ## 对某一列进行查重,返回该列存在的元素
data = data.drop_duplicates(subset="乘机人") ## 在指定的某列进行去重
data = data.reset_index(drop=True)   ## 对data表重新排序,这里的drop=true表示不在表内新建一列index,而是直接补上
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 36834 entries, 0 to 36833
Data columns (total 7 columns):
乘机人        36834 non-null object
航程         36834 non-null object
支付科目       36834 non-null object
票面_折扣      36834 non-null float64
票面_起飞时间    36834 non-null object
票面_降落时间    36834 non-null object
票面_舱位      36834 non-null object
dtypes: float64(1), object(6)
memory usage: 2.0+ MB
2.替换
  • 2.1 replace:replace()方法能够通过字典的形式来进行直接的替换
  • 2.2 apply:apply()方法能够通过传递一个函数进去后对每一个元素进行操作
## 通过字典来替换行名称,替换成英文后可以直接通过.passage 来代替["乘机人"]
data=data.rename(columns=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值