在Python中的对象数据类型主要包含,数值型、字符型、逻辑型、列表、元祖、字典、数据框。
本文将针对不同的数据类型进行介绍,说明其用法。
一、数值型、字符型、逻辑型说明
数值型
定义:数值型主要是指实数,正数,负数以及0。分为长整型,浮点值,复数
运算:数值型可以进行标准算术运算(+ - * / // % **)
举例:
- 长整型(long):94895893589 -87879789
- 浮点值(float):3.24435,-3.343
- 复数(complex):123-12j,123+12j(复数是由两部分组成,一部分是实数,一部分是虚数)
运算举例:
#取整
7 // 4
7 // 4
Out[5]: 1
#求余
10 % 4
10 % 4
Out[6]: 2
#乘方
2 ** 3
2 ** 3
Out[7]: 8
#一个关于浮点数运算需要注意的地方
a = 4.2
b = 2.1
a + b
Out[8]: 6.300000000000001
(a + b) == 6.3 #注意书写格式
Out[12]: False
#出现浮点问题,使用decimal进行封装,解决浮点问题
from decimal import Decimal
a = Decimal('4.2')
b = Decimal('2.1')
a + b
Out[15]: Decimal('6.3')
(a + b) == Decimal('6.3')
Out[16]: True
逻辑型
定义:逻辑型有称为布尔值,只有两个值(1和1,真和假)
运算:进行或(|)、与(&)、非(not)
举例:
- true
- false
运算举例:
字符型
定义:Python中字符串被定义为引号之间的字符集合,引号支持成对的单引号,双引号和三引号。
运算:主要通过索引操作符([ ])和切片操作符([ : ])得到子字符串
举例:
- a = “python”
- b= “is cool”
运算举例:
#使用反斜杠(\)转义特殊字符。
s = 'Yes,he doesn\'t' #反斜杠后面的引号不是Python的定义格式,是原始字符
s = 'Yes,he doesn\'t'
s
Out[19]: "Yes,he doesn't"
#如果你不想让反斜杠发生转义,
#可以在字符串前面添加一个r,表示原始字符串
print('C:\some\name')
C:\some
ame #Python中\n表示换行,如果让Python知道反斜杠本来就是反斜杠不进行转义,就使用双反斜杠
print('C:\\some\\name')
C:\some\name #如果不想使用双反斜杠,可以在字符串前面添加一个r,表示原始字符串
print(r'C:\some\name')
C:\some\name
#反斜杠可以作为续行符,表示下一行是上一行的延续。
s = "abcd\
efg"
print(s)
abcdefg
#还可以使用"""..."""或者'''...'''跨越多行
s = """
Hello I am fine!
Thinks.
"""
print(s)
Hello I am fine!
Thinks.
二、列表、元祖、字典说明
列表和元祖可以当做成普通的“数组”,它能保存任意数量任意类型的Python对象。通过从0开始的数字索引访问元素,但是列表和元祖可以存储不同类型的对象。
字典是Python中的映射数据类型,由键-值(key-value)对构成,几乎所有类型的Python对象都可以用作键,不过一般还是以数字或者字符串最为常用。
列表
定义:列表元素用([ ])包裹,元素的个数和元素的值可以改变
运算:和字符串一样可以通过索引操作符([ ])和切片操作符([ : ])得到子集
举例:
- aList = [1,2,3,4]
元组
定义:元组元素用(())包裹,不可以更改
运算:和字符串一样可以通过索引操作符([ ])和切片操作符([ : ])得到子集
举例:
- data = (‘robots’,77,93,’try’)
字典
定义:元组元素用({ })包裹
运算:通过键值进行提取
举例:
- dic = {‘host’:’earth’}
三、序列、数据框说明
pandas中有两种常用的数据结构:Series–系列;DataFrame–数据框
Series系列是用于存储一行或者一列的数据,以及与之相关的索引的集合。(可以理解为Excel中的一列,只是没有列名,因为只有一列,所以不需要列名)
#如何定义序列
from pandas import Series #从pandas包中调用series对象
#定义,可以混合定义
x = Series(
['a', True, 1]
)
x = Series(
['a', True, 1],
index=['first', 'second', 'third']
)
#访问
x[1]
Out[5]: True
#根据index访问
x['second']
Out[6]: True
#不能越界访问
x[3]
Traceback (most recent call last):
File "<ipython-input-7-ed224ad0520d>", line 1, in <module>
x[3]
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py", line 601, in __getitem__
result = self.index.get_value(self, key)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2483, in get_value
return libts.get_value_box(s, key)
File "pandas/_libs/tslib.pyx", line 923, in pandas._libs.tslib.get_value_box (pandas\_libs\tslib.c:18843)
File "pandas/_libs/tslib.pyx", line 939, in pandas._libs.tslib.get_value_box (pandas\_libs\tslib.c:18560)
IndexError: index out of bounds
#不能追加单个元素
x.append('2')
Traceback (most recent call last):
File "<ipython-input-8-849d5f69bcd3>", line 1, in <module>
x.append('2')
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py", line 1553, in append
verify_integrity=verify_integrity)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py", line 206, in concat
copy=copy)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py", line 263, in __init__
raise TypeError("cannot concatenate a non-NDFrame object")
TypeError: cannot concatenate a non-NDFrame object
#追加一个序列
n = Series(['2'])
x.append(n)
Out[9]:
first a
second True
third 1
0 2
dtype: object
x
Out[10]:
first a
second True
third 1
dtype: object
append并不会直接修改原来x的值。#需要使用一个变量来承载变化
x = x.append(n)
#判断值是否在X中存在,需要使用values属性。
'2' in x
Out[12]: False
'2' in x.values
Out[13]: True
#切片
x[1:3] (左边包含右边不包含)
Out[14]:
second True
third 1
dtype: object
#定位获取,这个方法经常用于随机抽样
x[[0, 2, 1]]
x[[0, 2, 1]]
Out[15]:
first a
third 1
second True
dtype: object
#根据index删除
x.drop(0)
Out[16]:
first a
second True
third 1
dtype: object
x.drop('first')
Out[17]:
second True
third 1
0 2
dtype: object
#根据位置删除
x.drop(x.index[3])
Out[18]:
first a
second True
third 1
dtype: object
#根据值删除
x['2'!=x.values]
Out[19]:
first a
second True
third 1
dtype: object