pandas基础(1)_Series和DataFrame
1:pandas简介
Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
2:Series和DataFrame()
1:Series:是一种类似于一维数组的对象,由下面两个部分组成:
Values:一组数据值(ndarray)类型
Index:相关的数据索引标签、
2:Series的创建方法
(1)由列表和numpy数组创建
>>> s=Series([1,3,4,5])
>>> s
0 1
1 3
2 4
3 5
dtype: int64
>>> #会自动将索引打印出来
>>> s.index=list('abcd')
>>> s
a 1
b 3
c 4
d 5
dtype: int64
>>> #使索引变成了字母abcd
>>> s = Series([1,2,3,4],index=['mike','sana','luna','la'])
>>> s
mike 1
sana 2
luna 3
la 4
dtype: int64
>>> #Series里面的数据是一维的
(2)由字典创建
>>> #Series里面的数据是一维的
>>> s1=Series({'a':1,'b':2})
>>> s1
a 1
b 2
dtype: int64
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
3:Series的索引
(1)显示索引
>>> s=Series(np.random.random(10),index=list('abcdefghig'))
>>> s
a 0.370897
b 0.993346
c 0.148304
d 0.456316
e 0.365877
f 0.424124
g 0.685219
h 0.694954
i 0.563674
g 0.982072
dtype: float64
>>> s['a']#使用index作为索引值
0.37089735452082695
>>> s.loc['a']#使用,loc方法显示获取索引
0.37089735452082695
>>> s[0]
0.37089735452082695
>>> s.loc[0]#因为是显示索引会报错
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
s.loc[0]#因为是显示索引会报错
>>> s.iloc[0]
0.37089735452082695
>>> #因为此时是隐式索引所以不会报错,,隐式索引默认为0,1,2.......
>>> s.loc['a':'e']
a 0.370897
b 0.993346
c 0.148304
d 0.456316
e 0.365877
dtype: float64
>>> #切片处理
>>>
Series的基本概念
可以把Series看成一个定长的有序字典
可以通过shape,size,index,values,,等得到series的属性
>>> s.shape
(10L,)
>>> s.size
10
>>> s.index
Index([u'a', u'b', u'c', u'd', u'e', u'f', u'g', u'h', u'i', u'g'], dtype='object')
>>> s.values
array([0.37089735, 0.99334641, 0.14830394, 0.45631575, 0.36587742,
0.42412389, 0.68521869, 0.69495357, 0.56367448, 0.98207233])
>>> #Series,values,就是一个ndrray包含关系,升级的关系,有了索引更方便
>>> s.shape
(10L,)
>>> s.head
<bound method Series.head of a 0.370897
b 0.993346
c 0.148304
d 0.456316
e 0.365877
f 0.424124
g 0.685219
h 0.694954
i 0.563674
g 0.982072
dtype: float64>
>>> s.tail
<bound method Series.tail of a 0.370897
b 0.993346
c 0.148304
d 0.456316
e 0.365877
f 0.424124
g 0.685219
h 0.694954
i 0.563674
g 0.982072
dtype: float64>
>>> #Series对象本身实例有一个name属性
>>> s.name="列名"
>>> s
a 0.370897
b 0.993346
c 0.148304
d 0.456316
e 0.365877
f 0.424124
g 0.685219
h 0.694954
i 0.563674
g 0.982072
Name: ????, dtype: float64
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、’
4:Series的运算
>>> s.add(10,fill_value=0)#在进行算数运算时,如果包含nan ,那么fill_value默认设置为fill_value值
a 10.370897
b 10.993346
c 10.148304
d 10.456316
e 10.365877
f 10.424124
g 10.685219
h 10.694954
i 10.563674
g 10.982072
Name: ????, dtype: float64
>>> #Series之间的运算
>>> s1=Series([2,4,7,9],index=[0,1,2,3])
>>> s2=Series([1,2,3,4],index=[2,3,4,5])
>>> s1+s2#Series索引值,进行相加时,就是索引值进行相加
0 NaN
1 NaN
2 8.0
3 11.0
4 NaN
5 NaN
dtype: float64
>>> #要保留所有的index,必须使用.add()函数
>>> s1.add(s2,fill_value=0)
0 2.0
1 4.0
2 8.0
3 11.0
4 3.0
5 4.0
dtype: float64
>>> s1.add(s2)
0 NaN
1 NaN
2 8.0
3 11.0
4 NaN
5 NaN
dtype: float64
>>> #因为不同的Series存在不同的索引值,所以当对应另一个Series不存在该索引时要把fill_value定义为0
>>> s=Series([1,2,None])
>>> nd=np.array([1,2,None])
>>> s.sum()
3.0
>>> nd.sum()#会报错,因为有非数字,没办法进行计算
Traceback (most recent call last):
File "<pyshell#89>", line 1, in <module>
nd.sum()#会报错,因为有非数字
File "E:\Python\lib\site-packages\numpy\core\_methods.py", line 32, in _sum
return umr_sum(a, axis, dtype, out, keepdims)
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
>>> #ndarray中如果有nan,没有办法进行计算,而Series可以
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
5:DataFrame的定义
DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】公用一个索引。DataFrame由按一定顺序排列的多列数据。设计初衷是将Series的使用场景从一维扩展到多维,DataFrame既有行索引,也有列索引
行索引:index
列索引:column
值:values(numpy的二维数组)
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
6:DataFrame的创建:
最常用的方法是由一个字典来创建,DataFrame以字典的建作为每一{列}的名称。以字典的值作为每一列
此外,dataframe和Series一样会自动为每一行加索引,相应值为nan
>>> df= DataFrame({'height':[175,180,169,188],'age':np.random.randint(18,25,size=4),'sex':['boy','girl','boy','girl']})
>>> df
age height sex
0 22 175 boy
1 20 180 girl
2 22 169 boy
3 20 188 girl
>>> df= DataFrame({'height':[175,180,169,188],'age':np.random.randint(18,25,size=4),'sex':['boy','girl','boy','girl']},index=list('ABCD'),columns=['height','age','sex','weight'])
>>> df
height age sex weight #weight默认为nan
A 175 19 boy NaN
B 180 23 girl NaN
C 169 21 boy NaN
D 188 18 girl NaN
>>> df.shape
(4, 4)
>>> df.values
array([[175L, 19, 'boy', nan],
[180L, 23, 'girl', nan],
[169L, 21, 'boy', nan],
[188L, 18, 'girl', nan]], dtype=object)
>>> df.columns
Index([u'height', u'age', u'sex', u'weight'], dtype='object')
>>> df.index
Index([u'A', u'B', u'C', u'D'], dtype='object')
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
7:DataFrame的索引
(1)对列进行索引
。通过类似字典的方式
。通过属性的方式
>>> df['age']
A 19
B 23
C 21
D 18
Name: age, dtype: int32
>>> #检索列返回值是Series
>>>
>>> df.age
A 19
B 23
C 21
D 18
Name: age, dtype: int32
>>> #对于DataFrame,列名,就相当于属性,
>>> #DataFrame是统计数据时,用的表格,某一个事物属性,每个属性对应Dataframe列名
>>> df['A']#该方法无法检索行,会报错
>>> #使用.loc[]加index来进行索引
>>> #使用.ix[]来进行索引,(过时)
>>> #使用iloc[]加整数来进行索引
>>> #对于行进行索引,返回值也是Series
>>> df.loc[['A','B']]
height age sex weight
A 175 19 boy NaN
B 180 23 girl NaN
>>> #!!!['A','B'],如果检索多行,返回的数据就是DataFrame
>>> df.loc['A':'C']
height age sex weight
A 175 19 boy NaN
B 180 23 girl NaN
C 169 21 boy NaN
>>> #从A到C左闭右闭
>>> df['height':'age']#对列是不可以进行切片的
Empty DataFrame
Columns: [height, age, sex, weight]
Index: []
>>> df.iloc[1:3]#隐式索引
height age sex weight
B 180 23 girl NaN
C 169 21 boy NaN
>>> #左开右闭
#!!!,DataFrame自身有bug,索引是汉字,有时无法检索
>>> df['sex']#直接用中括号时,索引表示的是列索引,切片表示的是行切片
A boy
B girl
C boy
D girl
Name: sex, dtype: object
>>> df['sex']['A':'B']
A boy
B girl
Name: sex, dtype: object
>>> df['sex']['A':'B']=['男','女']
>>> df
height age sex weight
A 175 19 ?? NaN
B 180 23 ? NaN
C 169 21 boy NaN
D 188 18 girl NaN
>>> df.loc['C','height']
169
>>> #检索行的时候,参数可以是多个
>>> #但是列无法完成该类型的操作
>>> df.values[0,2]
'\xc4\xd0'
>>> '\xc5\xae'#通过坐标进行检索
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
8:DataFrame的计算
de1=DataFrame(np.random.randint(0,150,size=(5,4)),index=['A','B','C','D','E'],columns=['a','b','c','e'])
>>> de1
a b c e
A 113 143 22 28
B 102 120 80 144
C 37 36 120 80
D 134 82 65 96
E 49 51 46 23
>>> de2=DataFrame(np.random.randint(0,150,size=(4,4)),index=['A','B','C','D'],columns=['a','b','c','e'])
>>> de2
a b c e
A 35 13 90 11
B 58 63 59 38
C 18 56 49 111
D 142 24 29 33
>>> de2.add(de1)
a b c e
A 148.0 156.0 112.0 39.0
B 160.0 183.0 139.0 182.0
C 55.0 92.0 169.0 191.0
D 276.0 106.0 94.0 129.0
E NaN NaN NaN NaN
>>> de2.add(de1,fill_value=0)
a b c e
A 148.0 156.0 112.0 39.0
B 160.0 183.0 139.0 182.0
C 55.0 92.0 169.0 191.0
D 276.0 106.0 94.0 129.0
E 49.0 51.0 46.0 23.0
>>> #fillvalue=0可以避免出现nan的情况
>>> de1+de2
a b c e
A 148.0 156.0 112.0 39.0
B 160.0 183.0 139.0 182.0
C 55.0 92.0 169.0 191.0
D 276.0 106.0 94.0 129.0
E NaN NaN NaN NaN
>>> de1=DataFrame(np.random.randint(0,150,size=(3,3)),index=['A','B','C'],columns=['a','b','c'])
>>> de1
a b c
A 140 4 101
B 120 101 127
C 127 71 91
>>> de2
a b c e
A 35 13 90 11
B 58 63 59 38
C 18 56 49 111
D 142 24 29 33
>>> de1.add(de2)
a b c e
A 175.0 17.0 191.0 NaN
B 178.0 164.0 186.0 NaN
C 145.0 127.0 140.0 NaN
D NaN NaN NaN NaN
>>> #无论是行索引还是列索引缺少了都要加NaN
>>> de1['a'].loc['A']=100
>>> de1
a b c
A 100 4 101
B 120 101 127
C 127 71 91
>>> de1['a']
A 100
B 120
C 127
Name: a, dtype: int32
>>> s1=de1['a']
>>> s1+de1
A B C a b c
A NaN NaN NaN NaN NaN NaN
B NaN NaN NaN NaN NaN NaN
C NaN NaN NaN NaN NaN NaN
>>> #对s1因为是Series索引是A,B,C,对于de1索引是a,b,c
>>> s2=de1.loc['A']
>>> s2
a 100
b 4
c 101
Name: A, dtype: int32
>>> s2+de1
a b c
A 200 8 202
B 220 105 228
C 227 75 192
>>> #列索引相同所以可以相加
>>> s2.index
Index([u'a', u'b', u'c'], dtype='object')
>>> de1.columns
Index([u'a', u'b', u'c'], dtype='object')
>>>
Python提供的函数:
+ add()
- sub(),或者multily()
* mul(),multiply()
/ truediv(),div(),divide()
// floordiv()
% mod()
** pow()
>>> ss=de1['a']
>>> ss
A 100
B 120
C 127
Name: a, dtype: int32
>>> de1.add(ss)
A B C a b c
A NaN NaN NaN NaN NaN NaN
B NaN NaN NaN NaN NaN NaN
C NaN NaN NaN NaN NaN NaN
>>> de1.add(ss,axis='index')#ss的索引变成a,b,c
a b c
A 200 104 201
B 240 221 247
C 254 198 218
>>> de1.add(ss,axis=0)
a b c
A 200 104 201
B 240 221 247
C 254 198 218
>>> de1.add(ss,axis=1)
A B C a b c
A NaN NaN NaN NaN NaN NaN
B NaN NaN NaN NaN NaN NaN
C NaN NaN NaN NaN NaN NaN
>>> #如果axis是零,则行是索引,所有列都有效
>>> #以列为单位进行操作,对所有列都有效,同理axis=1相反
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
9:DataFrame丢失数据的处理
处理丢失数据
有两种丢失数据 1 none 2 np.nan(NaN)
np.arange(0,10000)
#相同的计算,int运算的时间少于float,更少与object
Pandas中None与NaN都被视为np.nan
df = DataFrame({'age':[20,21,23,19,22],'salary':[10000,20000,11001,10101,21000]},index=['a','b','c','d','e'],columns=['age','salary','work'])
>>> df
age salary work
a 20 10000 NaN
b 21 20000 NaN
c 23 11001 NaN
d 19 10101 NaN
e 22 21000 NaN
>>> df.work['a':'b']
a NaN
b NaN
Name: work, dtype: object
>>> df.work['a':'b']='python'
>>> df
age salary work
a 20 10000 python
b 21 20000 python
c 23 11001 NaN
d 19 10101 NaN
e 22 21000 NaN
>>> >>> df.isnull()
age salary work
a False False False
b False False False
c False False True
d False False True
e False False True
>>> df.notnull()
age salary work
a True True True
b True True True
c True True False
d True True False
e True True False
>>> #根据获得的数据去除数据的空数据
>>> df.dropna()#去除含有空数据的行
age salary work
a 20 10000 python
b 21 20000 python
>>> #默认为行
>>> df.dropna(how='all')#去除全部为nan的行
age salary work
a 20 10000 python
b 21 20000 python
c 23 11001 NaN
d 19 10101 NaN
e 22 21000 NaN
>>> #所有都为null的才删除
>>> df.fillna(value='java')
age salary work
a 20 10000 python
b 21 20000 python
c 23 11001 java
d 19 10101 java
e 22 21000 java
>>> #使空数据修改为value值
#backfill,bfill,是向后填充ffill,pad是向前填充
>>> df
age salary work
a 20 10000 python
b 21 20000 python
c 23 11001 NaN
d 19 10101 NaN
e 22 21000 NaN
>>> df.fillna(method='backfill')#向后填充,实质是后面一行填充前面一行
age salary work
a 20 10000 python
b 21 20000 python
c 23 11001 NaN
d 19 10101 NaN
e 22 21000 NaN
>>> df.fillna(method='ffill')#向前填充
age salary work
a 20 10000 python
b 21 20000 python
c 23 11001 python
d 19 10101 python
e 22 21000 python
>>> df.fillna(method='ffill',inplace=True)#
>>> df
age salary work
a 20 10000 python
b 21 20000 python
c 23 11001 python
d 19 10101 python
e 22 21000 python
>>> obj=pd.Series(['blue','pure','yellow'],index=[0,2,4])
>>> obj
0 blue
2 pure
4 yellow
dtype: object
>>> obj.reindex(range(6),method='bfill')
0 blue
1 pure
2 pure
3 yellow
4 yellow
5 NaN
dtype: object
>>> #这是向后填充
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
3:总结
pandas的Series和DataFrame是构成表结构的两个重要的库,也是学习pandas的基础。
pandas基础(1)_Series和DataFrame的更多相关文章
- pandas基础:Series与DataFrame操作
pandas包 # 引入包 import pandas as pd import numpy as np import matplotlib.pyplot as plt Series Series 是 ...
- 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
一.reindex() 方法:重新索引 针对 Series 重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- Pandas 基础(8) - 用 concat 组合 dataframe
以各个城市的天气为例, 先准备下面的数据: 印度天气的相关信息: import pandas as pd india_weather = pd.DataFrame({ 'city': ['mumbai ...
- 利用Python进行数据分析(12) pandas基础: 数据合并
pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...
- Pandas基础学习与Spark Python初探
摘要:pandas是一个强大的Python数据分析工具包,pandas的两个主要数据结构Series(一维)和DataFrame(二维)处理了金融,统计,社会中的绝大多数典型用例科学,以及许多工程领域 ...
- numpy&pandas基础
numpy基础 import numpy as np 定义array In [156]: np.ones(3) Out[156]: array([1., 1., 1.]) In [157]: np.o ...
- Pandas 基础(1) - 初识及安装 yupyter
Hello, 大家好, 昨天说了我会再更新一个关于 Pandas 基础知识的教程, 这里就是啦......Pandas 被广泛应用于数据分析领域, 是一个很好的分析工具, 也是我们后面学习 machi ...
- 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础
在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...
随机推荐
- 洛谷 2868 [USACO07DEC]观光奶牛Sightseeing Cows
题目戳这里 一句话题意 L个点,P条有向边,求图中最大比率环(权值(Fun)与长度(Tim)的比率最大的环). Solution 巨说这是0/1分数规划. 话说 0/1分数规划 是真的难,但貌似有一些 ...
- 开源Flex Air版免费激情美女视频聊天室,免费网络远程视频会议系统((Flex,Fms3联合打造))
开源Flex Air版免费激情美女视频聊天室,免费网络远程视频会议系统((Flex,Fms3联合打造)) Flex,Fms3系列文章导航 Flex,Fms3相关文章索引 本篇是视频聊天,会议开发实 ...
- 查看物料凭证MB03 /MIGO A04-显示,R02-物料凭证
当货物移动操作后,可以使用事物码MB03.MIGO查询最近一次生成的物料凭证, 如果未知凭证号,Table:MKPF / AUFM/EKBE MKPF 抬头:物料凭证 KEY: MBLNR 物料凭证编 ...
- Python多人聊天室
一.目的 以实现小项目的方式,来巩固之前学过的Python基本语法以及相关的知识. 二.相关技术: 1.wxpython GUI编程 2.网络编程 3.多线程编程 4.数据库编程 5.简单的将数据导出 ...
- Ubuntu 17.4下如何安装和配置flash player
Ubuntu Linux系统下没有自带的flash player,要自己手动安装.下面post出简单的安装过程. 首先打开终端,输入命令:sudo apt-get install flashplugi ...
- IntelliJ IDEA 同时启动多个Tomcat实例端口是会冲突
- Android SDK和NDK
NDK是用来给安卓手机开发软件用的,但是和SDK不同的是它用的是C语言,而SDK用的是Java语言.NDK开发的软件在安卓的环境里是直接运行的,一般只能在特定的CPU指令集的机器上运行,而且C语言可以 ...
- longtable 跨越多个页面时,如何在跨页时自动断行并加上横线及去掉页眉
参考: http://users.sdsc.edu/~ssmallen/latex/longtable.html 一般的,在首行后面加上 \endfirsthead\hline\endhead\hli ...
- xpath normalize-sapce 函数的Java实现
normalize-space函数实现的功能是:删除字符串前后空格,中间的空格有多个只保留一个. 1. 用Java正则表达式 public static String normalizeSpace(S ...
- 如何在u盘上安装系统, (非安装盘)
在u盘中永久安装Fedora. 需要两个u盘(live usb), 一个系统镜像文件. 方法是: 用一个u盘作安装盘, 然后通过这个u盘把系统安装到另一个u盘上. 两个U盘上的文件都会被覆盖. 1. ...