numpy pandas

准备

获取去哪网如下信息:景区等级 景点名称 地址 价格 月销量

如果景区缺少等级用暂无替换并将信息写入CSV文件中

数据处理工具——Pandas

用于数据分析前的预处理,如数据转换类型,缺失值处理,描述性统计、数据汇总等

序列与数据框的构造

核心操作对象为序列与数据框的构造,序列为数据集中的一个字符,数据框指至少含有两个字段(或序列)

构造序列

  1. 通过同质列表元组构建,

  2. 通过字典构建

  3. 通过Numpy中的一维数字构建

  4. 通过DataFrame中的某一列构建

    import numpy as np
    import pandas as pd

    lst1 = pd.Series([1,2,3,4,5,6])
    lst2 = pd.Series({'a':1,'b':2,'c':3})
    lst3 = pd.Series(np.array((1,2,3,4,5,6)))
    print(lst1)
    print(lst2)
    print(lst3)

构造数据框

在一个数据框中可以存放不同数据类型的序列,如整数、字符串等,但是在数组合序列中则没有这样的优势,因为他们只能放同质的数据

df1 = pd.DataFrame([['张三', 20, '男'],['李四', 22, '女'],['王五', 24, '男']])
df2 = pd.DataFrame({'姓名':['张三','李四','王五'],'年龄': [20, 22, 24],
                    '性别': [ '男', '女', '男'] })
df3 = pd.DataFrame(np.array((['张三','李四','王五'],[20, 22, 24],['男', '女', '男'])))

外部数据的读取

数据集包含本地文件(csv,tex等),电子表格Excel和数据库

文本文件的读取

使用Pandas读取csv或txt格式文件中的数据,可以使用read_table函数或read_csv等都可以读取文件数据

pd.read_table(filepath_or_buffer,sep='\t',header='infer',names=None,index_col=None,usecols=None,dtype=None,converters=None,skiprows=None,skipfooter=None,nrows=None,na_values=None,skip_blank_lines=True,parse_dates=False,thousands=None,comment=None,encoding=None)

参数说明

filepath_or_buffer:指定文件路径

sep:指定原数据集中各字段之间的分隔符,默认为横向制表符

header:是否需要将数据集中在第一行作为表头,默认将第一行作为字段名称

names:如果原数据集中没有字段,可以通过该参数在数据读取时给数据框添加具体的表头

index_col:指定原数据集中的某些列作为数据框的行索引

usecols:指定需要读取原数据集中的那些变量名

dtype:读数据时,可以为原数据的每一个字段设置不同的数据类型

converters:通过字典格式,为数据集中的某些字典设置转换函数

skiprows:数据读取时,指定需要跳过的原数据集开头行

skipfooter:读取数据时,指定需要跳过原数据集末尾的行数

nrows:指定读取数据的行数

na_values:指定原数据集中那些特征的值作为缺失值

skip_blank_lines:读取数据时是否需要跳过原数据集中的空白行,默认为True

parse_dates:如果参数值为True则尝试解析数据框的行索引,如果参数为列表则尝试解析对应的日期列,如为嵌套列表则将某些列合并为日期列,如为字典则解析对应的列(字典中的值)并生成新的字段名(字典的键)

thousands:指定原数据中的千分位符

comment:指定注释符,在读取数据时,如果碰到行首位指定注释符则跳过

encoding:如文本含有中文则需要指定字符编码

读取test.txt文件要求:

中间数据行首以#开始的不读取,后三行不读,位符为&,如何将该字段读入为正常数值类型,将year month day解析为新的birthday字段

df = pd.read_table('text.txt',seq=',',parse_dates={'birthday':[0,1,2]},)
df = pd.read_table('test.txt',sep=',',parse_dates={
      'birthday':[0,1,2]},skiprows=2,skipfooter=3,comment='#',
      thousands='&',encoding='utf-8')
print(df)

电子表格读取

使用read_excel函数读取Excel表格数据

pd.read_excel()

参数

id:指定电子表格路径

sheetname:指定需要读取电子表格中的第几个sheet,即可以传递整数也可以传递sheet名称。

ndex_col:指定那些列用作为数据框的行索引

convert_float:默认将所有的数值类型字段转换为浮点型字段

converters: 通过字典形式指定某些列需要转换的形式

读取items.xlsx数据:

1.如何在读数据的时候设置好表头

2.第一列市纪委字符串字段,如何避免读取的时候自动转换为数值类型

info = pd.read_excel('items.xlsx',header=None,     names['ID','name','color','price'],converters={0:str})

csv中读取数据

df = pd.read_csv('文件',delimiter=',',encoding='utf-8',columns=[要读取的列])

写入去哪网门票csv文件,不要索引,只要列头,价格 销量

数据选择

行的选取

info = pd.read_csv('qunaer.csv',usecols=['月销量','价格'],delimiter=',')
print(info)
row = info[0:3]

列的选取

cols = info[['价格','月销量']]
print(cols)

块的选取

div = info.ix[0:3,['月销量']]
print(div)

操作行和块

从已有的列中创建一个新的列

info['销售额'] = info['价格'] * info['月销量']
df.head()

条件过滤

在中括号中加入判断条件来过滤行,条件返回值为True或False

print(info[(info['价格']<100]) &(info['月销量']>10000)])

数据整理

排序

将数据按照景点月销量字段进行排序

#set_index将某个字段作为index
df1 = info.set_index('月销量')
df2 = df1.sort_index()
print(df1)
练习:读取整个csv文件,按照月销量。价格两个字段进行排序,其中月销量作为第一排序因子
用到的方法:sortlevel(排序因子对应的下标)
用到方法:
sortlevel(排序因子对应的下标)  适用于0.24.2版本之前的pandas使用,0.24版本没有该方法

分组求均值

以景点等级分组,计算月销量的平均值

info = pd.read_csv('qunaer.csv')
df_mean = info.drop(['景点名称','地址','介绍','热度','经度','纬度'],axis=1).groupby('等级').mean().sort_values('月销量')
print(df_name)

drop() 删除axis

groupby()分组

mean()求平均值 sum()求和

sort_values('月销量') 依据’月销量进行排序‘