学习数据分析

本文详细介绍了Pandas库的基本操作,包括加载数据、Series和DataFrame的定义与操作,以及数据清洗与特征处理。重点讲解了如何利用Pandas进行数据排序、算术运算、缺失值处理和数据重构。此外,还涉及了探索性数据分析,如按列值排序和算术运算。
摘要由CSDN通过智能技术生成


参考: link.

第一章

第一节加载数据

  • 使用的库:pandas
  • 使用的函数: pd.read_csv()、pd.read_excel、pd.read_table()
test = pd.read_csv('test_1.csv',index_col=0)
#设置Index_col为0,防止出现unnamed列
  • tsv文件和csv文件
    1.TSV 是Tab-separated values的缩写,即制表符分隔值。相对来说CSV,Comma-separated values(逗号分隔值)更常见一些
    2.TSV是用制表符(Tab,’\t’)作为字段值的分隔符;CSV是用半角逗号(’,’)作为字段值的分隔符
    3.当delimiter=’\t’时,被处理文件就是TSV
  • 读取数据
    使用chunksize后,read_csv操作返回一个TextParser对象,每个chunk对象是一个dataframe对象
    使用for循环打印出10块以chunksize为行数,列数为原始数据列数的datafrme格式的数据。
  • 替换表头的名字,在read_csv中使用names=[]替换,索引为Index_col=[列名],header=0不保存原来的列名
  • 查看数据的基本信息
    info():打印信息,包括列名column,每列非空个数non_null count,类型dtype
    describe():描述性数据,对数值型的列进行汇总
    在这里插入图片描述
    shape: 形状 (行数, 列数)
    df.columns: 列标签 Index
    df.columns.values:列标签 ndarray
    df.index:行标签 Index
    df.index.values:行标签 ndarray
    df.head(n): 前n行
    df.tail(n): 尾n行

第二节pandas基础

  • pandas是基于numpy构建的,含有高级数据结构和操作工具
  • pandas中有两种数据类型DataFrameSeries

2.1 series

(一)定义

是一种类似于一维数组的对象,由一组数据以及一组与之相关的数据标签(索引)组成。series只有行索引,如果未指定索引,则是以数字自动生成.

obj=Series([4,7,-5,3])
print (obj)
>>>
0    4
1    7
2   -5
3    3
# 取值:
print(obj.values)
>>>
[ 4  7 -5  3]
#取出索引值
print (obj.index)
>>>
RangeIndex(start=0, stop=4, step=1)
#自定义索引
obj2=Series([4,7,-5,3],index=['d','b','a','c'])
prInt(obj2)
>>>
d    4
b    7
a   -5
c    3
#可以通过索引的方式选择series中的单一或一组值
print obj2['a'] #输出结果:-5
print obj2['d'] #输出结是:4
(二)操作
  • Series.order()进行排序,而DataFrame则用sort或者sort_index
  • (1)Numpy数组运算(根据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的链接
print obj2[obj2>0]  #取出>0的值
#输出结果如下:
d    4
b    7
c    3
print obj2*2
#输出结果如下:
d     8 b    14
a   -10
c     6
  • (2)还可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。它可以用在许多原来需要字典参数的函数中
print( 'b' in obj2)  #obj2中有索引'b'?若有就返回'True'
  • (3)如果数据被存在一个python字典中,也可以直接通过这个字典来创建Series
sdata={'Ohio':35000,'Texax':71000,'Oregon':16000,'Utah':5000}
obj3=Series(sdata)
print obj3
#输出结果如下:
Ohio      35000
Oregon    16000
Texax     71000
Utah       5000
#注:如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)
states=['California','Ohio','Oregon','Texax']
obj4=Series(sdata,index=states) #将sdata字典创建Series,索引用states来创建
print obj4
#California在sdata中没有相应的值,故是NaN缺省值
California        NaN
Ohio          35000.0
Oregon        16000.0
Texax         71000.0

2.2DataFrame

(一)定义

DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型。既有行索引也有列索引,可以被看做由series组成的字典。相当于表格,有行表头和列表头

a=pd.DataFrame(np.random.rand(4,5),index=list("ABCD"),columns=list('abcde'))
print(a)
>>>

在这里插入图片描述

(二)一些操作
# 增加列或修改列
a['f']=[1,2,3,4]
a['e']=10
#增加行或修改行
a.loc['D'] = 10
S=pd.DataFrame(np.random.rand(4,6),index=list('EFGH'),columns=list('abcdef'))
a=a.append(S) # 同一列进行拼接
#切片
a[['b','e']] #取'b','e'列
a.loc['A':'D',['a','c','f']] #取'A'-'D'行'a','c','f'列
a.loc[[100],['Pclass','Sex']]#loc取第100行的数据,行和列都要使用[],需要是列名
a.iloc[2,3]#取第三行第4列值
a.iloc[4,0]#取第五行第1列值设为None
#减少行或减少列
a=a.drop(['C','D']) #删除'C'行和'D'
a=a.drop('a',axis=1) #删除'a'列,axis=0表示行,axis=1表示列
a=a.drop('a',axis=1,inplace=False)#没有覆盖原先的数据,没有真的drop掉,默认是true
a=a.fillna(5)  #缺省值处(即NaN处填充为5)
a=a.dropna() #删除缺省值为NaN的行
(三)构造DataFrame的方法
  • 1.由等长列表或者Numpy数组组成的字典
data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
     'year':[2000,2001,2002,2001,2002],
     'pop':[1.5,1.7,3.6,2.4,2.9]}
frame=DataFrame(data)
>>>
   pop   state  year
0  1.5    Ohio  2000
1  1.7    Ohio  2001
2  3.6    Ohio  2002
3  2.4  Nevada  2001
4  2.9  Nevada  2002
  • 2.如果指定了列序列,则DataFrame的列就会按照指定的顺序进行排序
frame1=DataFrame(data,columns=['year','state','pop'])
>>>
   year   state  pop
0  2000    Ohio  1.5
1  2001    Ohio  1.7
2  2002    Ohio  3.6
3  2001  Nevada  2.4
4  2002  Nevada  2.9
  • 3.跟Series一样,如果传入的列在数据中找不到,就会产生NA值
frame2=DataFrame(data,columns=['year','state','pop','debt'],
                 index=['one','two','three','four','five'])
>>>                 
        year   state  pop debt
 one    2000    Ohio  1.5  NaN
 two    2001    Ohio  1.7  NaN
 three  2002    Ohio  3.6  NaN
 four   2001  Nevada  2.4  NaN
 five   2002  Nevada  2.9  NaN
         
  • 4.类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series
frame2['state']
>>>
one        Ohio
two        Ohio
three      Ohio
four     Nevada
five     Nevada
Name: state, dtype: object

frame2.year
>>>
one      2000
two      2001
three    2002
four     2001
five     2002
Name: year, dtype: int64
(四)数据操作
#按照某一列筛选
test[test['Age']<10]
midage =test[(test['Age']<50) &(test['Age']>10)]

第三节探索性数据分析

3.1将数据按照某一列的值进行排序
data.sort_values(by='c',ascending=False or True)
#通过索引进行排序:
series.sort_index() #默认行索引,升序
#通过值进行排序:
series.sort_values() #默认升序
#dataframe根据行索引进行降序排序(排序时默认升序,调节ascending参数):'
frame.sort_index(ascending=False)
#dataframe根据列索引进行排序:
frame.sort_index(axis=1)
#dataframe根据值进行排序:
frame.sort_values(by='a')
#通过多个索引进行排序:
frame.sort_values(by=['a','c'])
3.2 算术运算
  • 相加: 两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN
frame1_a + frame1_b

第二章

第一节数据清洗及特征处理

1.查看每一列缺失值个数

data.info()
data.isnull().sum()

2.对缺失值处理

data[data['Age']==None] = 0
data[data['Age'].isnull()]=0
data[data['Age']==np.nan]=0
data.dropna()
data.fillna(0)

3.查看重复值

data[data.duplicated()]
data.drop_duplicates()

4.连续数据离散化
分箱处理

data['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])
df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])
df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = [1,2,3,4,5])

5.对文本变量进行转换

查看文本变量名及种类

df['Sex'].value_counts()
df['Sex'].unique()
df['Sex'].nunique()

将类别文本转换

df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})

多个变量转换,使用sklearn

from sklearn.preprocessing import LabelEncoder
for feat in ['Cabin', 'Ticket']:
    lbl = LabelEncoder()  
    label_dict = dict(zip(df[feat].unique(), range(df[feat].nunique())))
    df[feat + "_labelEncode"] = df[feat].map(label_dict)
    df[feat + "_labelEncode"] = lbl.fit_transform(df[feat].astype(str))

第二节数据重构

1.merge、concat、join、append的用法
merge和concat是pandas中得用法;join和append是python自带的
merge和join不能进行纵向合并,即不能做到增加行;而append不能进行横向合并,即不能增加列
merge
使用merge合并时,两个数据集的合并条件必须是类型一致,默认是内连接,也可以选择left,right,outer等方式

pd.merge(df1,df2,on='',how='')
pd.merge(df1,df2,left_on='',right_on='',how='')

concat
合并两个数据集,可在行或者列上合并(用axis调节,默认axis=0)

pd.concat([df1,df2])#默认纵向合并
pd.concat([df1,df2],axis=1) #横向合并

join
索引上的合并,是增加列不是增加行,当合并的数据表列名字相同,通过lsuffix和rsuffix区别相同列名,列名不能重合

data=df1.join(df2,how='outer',lsuffix='_1',rsuffix='_2')

append
增加行

data= df1.append(df2,ignore_index=True)

2.stack()函数
将dataframe格式的数据转换为series格式

data.stack() 

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值