|
1、为什么学习pandas?
numpy已经能够帮助我们处理数据,能够结合matlotlib解决我们数据分析的问题,那么pandas学习的目的是什么?
答:numpy能够帮助我们处理数值型数据,但是这还不够,很多时候我们的数据除了数值之外,还有字符串、时间序列等,比如,我们爬虫获取到了存储在数据库中的数据,比如之前youtube的例子中除了数值外还有国家的信息,视频的分类(tag)信息,标题信息等。
所以,numpy能够帮助我们处理数值,pandas除了数值之外(基于numpy),还能帮助我们处理其他类型的数据。
2、pandas的常用数据类型
(1)Series一维数组,带标签数组
(2)dataframe二维数组,Series容器
创建Series
# 创建series import pandas as pd import numpy as np import string t = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10])) #若不指定索引值,默认为从0开始的数值序号 print(t) print(type(t)) ''' A 0 B 1 C 2 D 3 E 4 F 5 G 6 H 7 I 8 J 9 dtype: int32 <class 'pandas.core.series.Series'> '''
注意这样几个问题:
pd.Series能干什么,能够传入什么类型的数据让其变成Series结构
index是什么,在什么位置,对于我们常见的数据库数据或者ndarray来说,index到底是什么?
如何给一组数据指定index
t = pd.Series([1,2,3],index=list('abc')) # Series传入的值是列表,传入的索引是相应数量的列表 print(t) ''' a 1 b 2 c 3 dtype: int64 '''
若不指定index
t = pd.Series([1,2,3]) print(t) ''' 0 1 1 2 2 3 dtype: int64 '''
通过字典创建一个Series,注意其中的索引赋值就是字典的键
temp_dict = {'name':'xiaohong','age':30,'tel':10086} t3 = pd.Series(temp_dict) print(t3) ''' # name xiaohong # age 30 # tel 10086 # dtype: object # '''
a = {string.ascii_uppercase[i]:i for i in range(10)} #字典推导式创建一个字典a print(a) print(pd.Series(a)) #通过字典创造一个Series,注意其中的索引赋值就是字典的键 ''' {'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8, 'J': 9} A 0 B 1 C 2 D 3 E 4 F 5 G 6 H 7 I 8 J 9 dtype: int64 '''
重新给指定其他索引之后,如果能够对应上,就取其值,如果不能,就为Nan。
a = {string.ascii_uppercase[i]:i for i in range(10)} #字典推导式创建一个字典a t = pd.Series(a,index=list(string.ascii_uppercase[5:15])) print(t) #重新给指定其他的索引之后,如果能够对应上,就取其值,如果不能,就为Nan, # 其实非常好理解,一个人有10种水果,你要了苹果香蕉菠萝,他有苹果香蕉但是没有菠萝,这时候就为nan # 为什么类型为float呢?numpy种nan为float,pandas会自动根据数据类更改series的dtype类型 # 那么问题来了,如何修改dtype呢?答:和numpy的方法一样。 ''' F 5.0 G 6.0 H 7.0 I 8.0 J 9.0 K NaN L NaN M NaN N NaN O NaN dtype: float64 '''
为什么类型为float呢?numpy中nan为float,pandas会自动根据数据类型更改Series的dtype类型
那么问题来了,如何修改dtype呢?答:和numpy的方法一样。
可通过索引和位置取值
temp_dict = {'name':'xiaohong','age':30,'tel':10086} t3 = pd.Series(temp_dict) print(t3['age']) print(t3['tel']) print(t3[1]) # 取连续数值 print(t3[2:10:2]) # 可通过索引和位置取值 ''' 30 10086 30 tel 10086 dtype: object '''
对于一个陌生的Series类型,我们如何知道他的索引和具体的值呢?
temp_dict = {'name':'xiaohong','age':30,'tel':10086} t3 = pd.Series(temp_dict) print(t3.index) #Index(['name', 'age', 'tel'], dtype='object') print(t3.values) # ['xiaohong' 30 10086] print(type(t3.index)) #<class 'pandas.core.indexes.base.Index'> print(type(t3.values)) #<class 'numpy.ndarray'>
Series对象本质上由两个数组构成,一个数组构成对象的键(index,索引),一个数组构成对象的值(values),键->值
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。ndarray的很多种方法可以运用于Series类型,比如argmax,clip。
for i in t3.index: print(i) #可迭代的 ''' name age tel ''' for i in t3.values: print(i) #可迭代的 ''' xiaohong 30 10086 '''
a = pd.Series(range(3)) print(a.where(a>0)) ''' 0 NaN 1 1.0 2 2.0 dtype: float64 '''
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-5-3 05:33
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社