yiruia的个人博客分享 http://blog.sciencenet.cn/u/yiruia

博文

Day29 pandas_Series和读取外部数据

已有 1579 次阅读 2020-6-4 09:16 |系统分类:科研笔记

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
'''




https://blog.sciencenet.cn/blog-3405644-1236358.html

上一篇:Day27 numpy数组_基本操作
下一篇:Day29 pandas读取外部数据,DataFrame
收藏 IP: 223.91.46.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-3 05:33

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部