Python-Pandas{数据结构与基本功能}
Pands
- Series
- 手动构建Series
- Series的索引和切片
- 按照字典的方式进行索引和切片
- 增加数据和删除数据
- 小练习:
- 广播的方法进行计算
- DataFrame
- DataFrame的创建
- DataFrame 的索引和切片
- 提取列数据
- 索引和切片
- 序列值索引
- 小练习
- 新增/删除列
- 新增一行数据
- 新增一列数据
- 删除数据
- 查看信息
- 掩码提取数据
- 数据的读取与保存
- 读取
- 写入
博客文章内需要的文件: 文件
pandas学习路线:
Python-Pandas{数据结构与基本功能
Python-Pandas{描述与统计功能}
Python-pandas{缺失值处理}
Python-pandas{文本数据处理}
Python-pandas{数据分组}
Pandas通常是用于数据分析过程中, 数据的清洗, 数据预处理, 数据的描述性分析等过程中。在整个Python数据分析的生态环境中, Pandas的地位非常重要, 利用Pandas可以快速便捷的对数据进行各种各样的处理与操作.
在Pandas中, 最重要的两种数据结构是1维的Series
和2维的DataFrame.
- Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。
Series中能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。但是每个Series中只能保存一种数据结构.
- DataFrame:二维的表格型数据结构。有多个Series共同构成的集合就变成DataFrame.
Pandas是基于Numpy的一个数据分析包, 它里面的内核是Numpy,可以将Pandas理解为: 一个课编程版的EXCEL
# 导入相关库
import numpy as np
import pandas as pd
Series
Series 是一个带有 名称 和 索引 的一维数组
既然是数组,肯定要说到的就是数组中的元素类型,在 Series 中包含的数据类型可以是整数、浮点、字符串、Python对象等。
手动构建Series
假定有一个场景是:存储一些用户的信息,暂时只包括年龄信息。
我们可以通过 Series 来存储,这里我们通过 Series 存储了五个年龄:22, 3000, 33, 37, 40, 1500,只需将要存储的数据构建成一个数组,然后赋值给data参数即可。
用函数或者类将,构建Series
- 参数说明
- data=None, 数据
- index=None, 索引
- dtype=None, 数据类型
- name=None, 列名称
L = [22, 3000, 33, 37, 40, 1500]]
s = pd.Series(L)
print(s)
'''
0 22
1 3000
2 33
3 37
4 40
5 1500
dtype: int64
'''
# 使用Series类创建Series对象
test = pd.Series(data)
# 输出test,是一样的结果# 还可以对Series进行一些拓展
L2 = ['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔']
s = pd.Series(L,index=L2,dtype='float' ,name='英雄年龄')
print(s)
'''
蜘蛛侠 22.0
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
Name: 英雄年龄, dtype: float64
'''
print(s.name) # 提取名称
# 英雄年龄print(s.index) # 提取索引
# Index(['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔'], dtype='object')print(s.values) # 其取值
# [ 22. 3000. 33. 37. 40. 1500.]s.index.name = '英雄姓名'
print(s)
'''
英雄姓名
蜘蛛侠 22.0
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
Name: 英雄年龄, dtype: float64
'''
s.name = 'Hero Age' # 我们可以通过赋值的方式给该属性传一个值, 或者改变原来的值
print(s)
'''
英雄姓名
蜘蛛侠 22.0
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
Name: Hero Age, dtype: float64
'''
Series的索引和切片
非常非常高级的数据类型,所以它的索引和切片方法也非常非常多.
体现: 它把我们之前学过的不同数据类型的索引和切片给集成到一块。既可以当做是列表索引,也可以当做字典索引
按照字典的方式进行索引和切片
对于 Series 的索引和切片,我们可以有两种思路,一种是把它当做是一个字典,索引就是字典的 key,数据就是字典的 value。
- 首先我们先来回忆一下字典的索引方式。
d = {'a':111, 'b':222,'c':333}
print(d)
'''
{'a': 111, 'b': 222, 'c': 333}'''
print(d['b'])
'''
222
'''
- 其实矩阵数组的索引方式也是一样的
import pandas as pd
L = [22, 3000, 33, 37, 40, 1500]
s = pd.Series(L)
print(s)
'''
0 22
1 3000
2 33
3 37
4 40
5 1500
dtype: int64
'''
L2 = ['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔']
s = pd.Series(L,index=L2,dtype='float' ,name='英雄年龄')
print(s)
'''
蜘蛛侠 22.0
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
Name: 英雄年龄, dtype: float64
'''
print(s['钢铁侠'])
'''
37.0
'''
print(s.get('冰封侠','没有')) # 判断是否有冰封家的索引,如果有把vlaue输出,如果没有输出没有
'''
没有
'''
print(s['奇异博士':'蝙蝠侠']) # 这里是有字典不同的地方,字典的范围索引是 左闭右开区间,那数组矩阵是左必右闭区间
'''
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
Name: 英雄年龄, dtype: float64
'''
# 我们也可以设置步长
print(s['灭霸':'索尔':2])
'''
灭霸 3000
钢铁侠 37
索尔 1500
Name: 英雄年龄, dtype: int64
'''# 我们也可以同样修改value的值
s['蜘蛛侠'] = 24
print(s)
'''
蜘蛛侠 24.0
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
Name: 英雄年龄, dtype: float64
'''
# 同时修改钢铁侠和蝙蝠侠的年龄
s['钢铁侠':'蝙蝠侠'] = 39,42
- 字典索引方式 : 比如说:显示索引 蜘蛛侠, 灭霸
列表索引方式 : 比如说:隐式索引 [0,1,2,3,4,5]
print(s)
'''
蜘蛛侠 24.0
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
Name: 英雄年龄, dtype: float64
'''
print(s[0:1])
'''
蜘蛛侠 24
Name: 英雄年龄, dtype: int64
'''
# 这个时候,我们就可以发现隐式索引,是左闭右开区间的
print(s[1:4])
'''
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
Name: 英雄年龄, dtype: float64
'''
print(s[3:])
'''
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
Name: 英雄年龄, dtype: float64
'''
print(s[0])
'''
24.0
'''# 我们发现当[]只有一个值的时候,提取出来的是,vlaues# 也可以倒着来
print(s[-1])
'''
1500.0
'''
我们发现这样操作有一定的局限性,就是说,根据索引所提取出来的values是连续的。那么我们是否有一定的办法来提取间断的values呢?
- 传入索引值序列的方式提取数据
import pandas as pd
L = [22, 3000, 33, 37, 40, 1500]
s = pd.Series(L)
L2 = ['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔']
s = pd.Series(L,index=L2,dtype='float' ,name='英雄年龄')
print(s)
'''
蜘蛛侠 22.0
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
Name: 英雄年龄, dtype: float64
'''
print(s[ ['蜘蛛侠','蝙蝠侠','索尔'] ])
'''
蜘蛛侠 22.0
蝙蝠侠 40.0
索尔 1500.0
Name: 英雄年龄, dtype: float64
'''
# 我们发现这样的方式,可以实现间断提取
#这样的方式下 我们可以实现重复提取
print(s[['索尔','蝙蝠侠','蝙蝠侠']])
'''
索尔 1500
蝙蝠侠 40
蝙蝠侠 40
Name: 英雄年龄, dtype: int64
'''
# 隐世索引提取
print(s[[0,1,4]])
'''
蜘蛛侠 24
灭霸 3000
蝙蝠侠 40
Name: 英雄年龄, dtype: int64
'''
# 同样的隐世索引 也可以实现重复提取
print(s[[0,0,0]])
增加数据和删除数据
- 增加数据
其实和字典新增数据是一样的
# 新增一个数据
s['闪电侠'] = 21
print(s)
'''
蜘蛛侠 22.0
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
闪电侠 21.0
Name: 英雄年龄, dtype: float64
'''
- 删除数据
.pop()
可以弹出指定数据
.drop()
可以删除指定数据
print(s)
'''
蜘蛛侠 22.0
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
闪电侠 21.0
Name: 英雄年龄, dtype: float64
'''
print(s.pop('闪电侠'))
'''
21.0
'''
print(s)
'''
蜘蛛侠 22.0
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
Name: 英雄年龄, dtype: float64
'''
# 我们发现.pop()可以提取数据,但是提取,则在原数据上,删除了提取的数据。# 删除
print(s.drop('灭霸'))
'''
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
Name: 英雄年龄, dtype: float64
'''
print(s)
'''
灭霸 3000.0
奇异博士 33.0
钢铁侠 37.0
蝙蝠侠 40.0
索尔 1500.0
Name: 英雄年龄, dtype: float64
'''
# 我们发现使用.drop指令,会生成了新的副本,而原有的数据不会改变# 一次删除多个
s2 = s.drop(['灭霸','索尔','蝙蝠侠'])# 重点 : 参数inplace 为Ture就是直接在原数据中进行修改,而不是生成一个新的,默认为Flase
s.drop('灭霸',inplace=True, )
print(s)
'''
蜘蛛侠 24
奇异博士 35
钢铁侠 39
蝙蝠侠 40
索尔 1500
Name: 英雄年龄, dtype: int64
'''
小练习:
一下是一些股票代码和股票名称,
- 300783 三只松鼠
- 601236 红塔证券
- 603256 宏和科技
- 601698 中国卫通
- 603867 新化股份
- 600968 海油发展
- 300594 朗进科技
- 603863 松炀资源
- 603217 元利科技
- 将这列数据创建成一个 Series,股票名称作为索引,股票代码是数据.
- 使用显式索引提取出红塔证券的代码
- 使用隐式索引提取新化股份的股票代码
- 使用显式索引提取从三只松鼠到中国卫通的股票代码
- 使用显式索引提取元利科技,松炀资源,朗进科技的股票代码
- 使用隐式索引提取红塔证券中国卫通和海油发展的代码
- 使用显式索引和隐式索引分别提取三只松鼠,宏和科技,海油发展的股票代码
- 在序列中添加一个新的数据,东方金钰 股票代码为 600086
- 在序列中将中国卫通股票代码修改为 666666
- 删除掉三只松鼠
- 将最后三只股票代码改成 100000
- 一次性将中国卫通,宏和科技,海油发展的数据改为 966666
data = [300783,601236,603256,601698 ,603867,600968,300594,603863,603217]
index = ["三只松鼠",'红塔证券','宏和科技','中国卫通','新化股份','海油发展','朗进科技','松炀资源','元利科技']
import pandas as pd
stock = pd.Series(data, index)
print(stock['红塔证券'])
print(stock[0])
print(stock['三只松鼠','中国卫通'])
print('元利科技':'朗进科技':-1)
print(s[1:6:2])
print(s[['三只松鼠','宏和科技','海油发展']])
print(s[[0,2,5]])
stock['东方金玉'] = 60086
stock['中国卫通'] = 666666
stock.drop('三只松鼠',inplace=True)
stock[-3:] = 100000
stock[['中国卫通','宏和科技','海油发展']] = 966666
广播的方法进行计算
因为Series底层封装的也ndarray数组结构, 因此同样支持向量化操作, 可以利用广播的方法进行计算.
import numpy as np
import pandas as pd
data = np.array([22, 3000, 33, 37, 40, 1500])
s = pd.Series(data ,name='英雄年龄' , index= ['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔'])
s.index.name = "英雄姓名"
print(s)
'''
英雄姓名
蜘蛛侠 22
灭霸 3000
奇异博士 33
钢铁侠 37
蝙蝠侠 40
索尔 1500
Name: 英雄年龄, dtype: int32
'''
print(s)
'''
英雄姓名
蜘蛛侠 24
灭霸 3002
奇异博士 35
钢铁侠 39
蝙蝠侠 42
索尔 1502
Name: 英雄年龄, dtype: int32
'''
print(s ** 2)# 封装了很多统计的方法s.mean() # 求平均值s.max() # 求最大值s.min() # 求最小值
# 等等一系列的计算方法
DataFrame
DataFrame 是一个带有索引的二维数据结构,每列可以有自己的名字,并且可以有不同的数据类型。你可以把它想象成一个 excel 表格或者数据库中的一张表,DataFrame 是最常用的 Pandas 对象。
DataFrame的创建
在构建 DataFrame 的时候,主要有两种思路
- 数据为字典类的格式, 是以列的方式进行组织, 字典的 key 将会作为列名,字典的值value作为列的数据.
data = {"年龄":[19, 3000, 30, 37, 40, 1500], "城市":["纽约皇后区", "泰坦星球","费城", "纽约", "哥谭", "阿斯加德" ],"装备":['蜘蛛战服','无限手套','披风','动力装甲','蝙蝠战衣','雷神之锤']
} # 冒号前为键。
index = ['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔']
df = pd.DataFrame(data,index = index)
print(df)
'''年龄 城市 装备
蜘蛛侠 19 纽约皇后区 蜘蛛战服
灭霸 3000 泰坦星球 无限手套
奇异博士 30 费城 披风
钢铁侠 37 纽约 动力装甲
蝙蝠侠 40 哥谭 蝙蝠战衣
索尔 1500 阿斯加德 雷神之锤
'''
- 数据为列表类形式, 是以行的方式进行组织的, 列名需要用参数传入进去.
data = [[19, "纽约皇后区",'蜘蛛战服'], [3000, "泰坦星球",'无限手套'], [30, "费城",'披风'], [37, "纽约",'动力装甲'], [40, "哥谭",'蝙蝠战衣'], [1500, "阿斯加德",'雷神之锤']
]
index = ['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔']
df = pd.DataFrame(data, columns=['年龄', '城市','装备'], index=index)
从本地磁盘中进行读取
eastmoney = pd.read_csv('eastmoney.csv') # 将文件放置在同一个路径下
DataFrame 的索引和切片
提取列数据
提取数据表中的列, 是最常用的操作之一, 因此这个操作也非常简单.
只要把列名作为索引的 key 就可以了
print(df)# 三个元素: 年龄,城市,装备
# 通过列名提取里面的Series
df['装备']
'''
蜘蛛侠 蜘蛛战服
灭霸 无限手套
奇异博士 披风
钢铁侠 动力装甲
蝙蝠侠 蝙蝠战衣
索尔 雷神之锤
Name: 装备, dtype: object
'''
# 也可以提取多个Series
print(df[['年龄','城市']])
# 同样可以实现重复提取# print(df[['年龄','年龄','城市']])
# 将列名当做一个实例属性看待
print(df.装备) # 其实最后显示出的结果 与 print(df['装备'])
# 但是这种方法只能提取一列,不能一次提取多列,但是df[]可以一次提取多列
索引和切片
对应字典和列表的两种方式,也是分为两种思路, 分别是显式索引
和隐式索引
- 显式索引
在显示索引中,把 DataFrame 的索引值当做第一个轴的 key,把列名当做第二个轴的 key,语法就是.loc[索引行,索引列 ]
# 依旧以df为例
# 例如我现在想要奇异博士的城市,则需要通过行索引"奇异博士" 和列索引"博士" 去进行定位print(df.loc['奇异博士','城市'])
'''
费城
'''
# 也可以进行切片,例如我想要获取从奇异博士到蝙蝠侠的装备数据print(df.loc['奇异博士':'蝙蝠侠', '装备'])
'''
奇异博士 披风
钢铁侠 动力装甲
蝙蝠侠 蝙蝠战衣
Name: 装备, dtype: object
'''
# 提取的是二维的, 返回的就是DataFrame
print(df.loc['钢铁侠':'蝙蝠侠','城市':'装备'])
# 也可以设置步长,灭霸到蝙蝠侠的年龄
print(df.loc['灭霸':'蝙蝠侠':2,'年龄'])
'''
灭霸 3000
钢铁侠 37
Name: 年龄, dtype: int64
'''
省略某个维度的索引值
当后面的维度不需要索引,全都想要时
print(df.loc['灭霸':'钢铁侠'])
'''年龄 城市 装备
灭霸 3000 泰坦星球 无限手套
奇异博士 30 费城 披风
钢铁侠 37 纽约 动力装甲
'''
print(df.loc[: , '装备']) # 所有行
'''
蜘蛛侠 蜘蛛战服
灭霸 无限手套
奇异博士 披风
钢铁侠 动力装甲
蝙蝠侠 蝙蝠战衣
索尔 雷神之锤
Name: 装备, dtype: object
'''# 同样我们可以设置步长
print(df.loc[:,'年龄':'装备':2])
'''年龄 装备
蜘蛛侠 19 蜘蛛战服
灭霸 3000 无限手套
奇异博士 30 披风
钢铁侠 37 动力装甲
蝙蝠侠 40 蝙蝠战衣
索尔 1500 雷神之锤
'''
- 隐式索引
使用 iloc
也就是 index_loc
这种方式不看你的行索引和列索引是什么名称,可以把数据当做是一个有序列表, 只看数据是处于表中的一个什么位置。
# 以df为例# 奇异博士的城市
print(df.iloc[2, 1])
'''
费城
'''
print(df.iloc[2:4 , 1:])
print(df.iloc[0]) # 第0行全部数据
'''
年龄 19
城市 纽约皇后区
装备 蜘蛛战服
Name: 蜘蛛侠, dtype: object
'''
print(df.iloc[[0,1,5],[1,2]])
序列值索引
我们注意到, 上面的那种索引方式其实有一定的局限性, 如果想要索引的值并没有规律的 步长, 恐怕就做不到了!例如我想要蜘蛛侠, 灭霸和蝙蝠侠这三个人的城市信息, 用刚才的方法, 能够做到吗?
# 这时候,我们可以直接使用想要的索引值构成一个序列, 用这个序列作为索引填入进去
# 以df为例
print(df.loc[ ['灭霸','奇异博士','索尔'] ,'年龄' ]) # 显式索引
'''
灭霸 3000
奇异博士 30
索尔 1500
Name: 年龄, dtype: int64
'''# 两个坐标轴都可以这样做,而且不用考虑原数据的顺序
print(df.loc[ ['灭霸','奇异博士','索尔'] ,['装备','城市','装备'] ])
'''装备 城市 装备
灭霸 无限手套 泰坦星球 无限手套
奇异博士 披风 费城 披风
索尔 雷神之锤 阿斯加德 雷神之锤
'''
小练习
- 读取 student_grade 数据集,储存在变量 grade 中
grade = pd.read_csv('student_grade.txt',sep='\t') # 设置分隔符\t
- 使用两种方法提取姓名列
grade['姓名']
grade.姓名
- 提取语文数学英语三列数据
grade['语文','数学','英语']
- 提取从第 10 名到 20 名同学的数据
grade.iloc[9:19]
- 提取前十个同学的姓名和总分
grade.iloc[:9,['姓名','总分']]
- 提取所有偶数学员的成绩
grade.iloc[::2]
- 提取班名次为 第28, 38 ,42 三个同学的总分
grade.loc[[27,37,42 ],['总分']]
- 提取行索引为12, 18 ,20 三个同学的 班名次和姓名
grade.loc[[12,18,20],['班名次','姓名']]
新增/删除列
在生成了 DataFrame 之后,突然你发现好像缺失了用户的性别这个信息,如何添加呢?
如果所有的性别都一样,我们可以通过传入一个标量,Pandas 会自动帮我们广播来填充所有的位置。
新增一行数据
# 以df为例# 新增行需要用loc 不能用iloc
df.loc['黑寡妇'] = [43,'前苏联','手枪']
新增一列数据
df['性别'] = '男' # 新列全部为男性
df['性别'] = ['男','男','男','男','男','男','女'] # 按行分别指定新增列的数据
删除数据
与Series一样,分.pop
和.drop
,且用途一样
df.pop('性别') # 弹出一列数据
# 弹出后的df 则是删除了“性别”列的数据# .drop两个指令index和columns
# index=None 删除行
# columns=None 删除列
df.drop(index = '钢铁侠')
df.drop(index = ['钢铁侠','灭霸','蝙蝠侠'])
df.drop(columns='年龄' )
查看信息
如果我们的数据量非常大,我想看看数据长啥样,我当然不希望查看所有的数据了,这时候我们可以采用只看头部的 n 条或者尾部的 n 条。
查看头部的n 条数据可以使用 head
方法,查看尾部的 n 条数据可以使用 tail
方法。
# 以grade为例
grade.head() # 默认前5条数据
grade.head(6) # 指定查看前6条数据
grade.tail()# 默认末尾5条数据
grade.tail(6) # 指定查看末尾6条数据
除此之外,我们还可以 .shape
获取数据的形状(几行几列),通过 .T
获取数据的转置。
# 查看数据基本信息 info
grade.info
掩码提取数据
对grade数据进行提取,其实就是数据的过滤
import pandas as pd
data = {"年龄":[19, 3000, 30, 37, 40, 1500], "城市":["纽约皇后区", "泰坦星球","费城", "纽约", "哥谭", "阿斯加德" ],"装备":['蜘蛛战服','无限手套','披风','动力装甲','蝙蝠战衣','雷神之锤']
} # 冒号前为键。
index = ['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔']
df = pd.DataFrame(data,index = index)
df.loc['黑寡妇'] = [43,'前苏联','手枪']
# 首先我们来举一个例子
# 布尔序列提取数据
T = [True, False, False, True,True,True,False]
df[T]
# 我们发现的是,输出的结果,均是Ture的数据。
print(df.年龄 > 50)
'''
蜘蛛侠 False
灭霸 True
奇异博士 False
钢铁侠 False
蝙蝠侠 False
索尔 True
黑寡妇 False
Name: 年龄, dtype: bool
'''
# 我们得到了关于年龄的 Ture和False的值
df[df.年龄 > 50]
# 输出的值都是Ture的值
df[df.装备 == '雷神之锤']
'''年龄 城市 装备
索尔 1500 阿斯加德 雷神之锤
'''
#对grade数据进行提取# 提取班级名次为 30名的同学的成绩
grade[grade.班名次 == 30]# 提取班级名次为5的倍数的同学的成绩
grade[ grade.班名次 % 5 == 0 ]# 提取总分大于 300 小于 400的同学的成绩
grade[ (grade.总分 > 300) & (grade.总分 < 400) ] # 需要注意的是300< grade.总分<400这种语法是错误的,我们只有 & 与 | 或 ~ 非# 提取刘姗同学的成绩
grade[grade.姓名 == '刘姗']# 提取 王雪 ,李季 同学的 姓名和总分成绩
grade[(grade.姓名 == '王雪') | (grade.姓名 == '李季') ][['姓名','总分']]
# 我们学习的loc和iloc也能支持
grade.loc[ (grade.姓名 == '王雪') | (grade.姓名 == '李季') ,['姓名','总分'] ]# 提取 任何一科为90分的同学的成绩
grade[(grade.数学 == 90) | (grade.语文 == 90) | (grade.英语 == 90) ]# 数学不及格同学的成绩
grade[ ~(grade.数学 >= 90)]
数据的读取与保存
读取
.read_csv
所有的文本模式,都可以用这个读取 csv, txt …只要你能用记事本打开的。
- filepath_or_buffer: 文件,
- sep=’,’, 数据分隔符
- delimiter=None, 同上
- header=‘infer’, 表头/列名 ,默认,用数据的第一行作为列名. None就是不用据列名
- names=None, 列名
- index_col=None, 用哪一列作为行索引
pd.read_csv('student_grade.txt',sep='\t',index_col='班名次')
打开excel文件,使用.read_exce
我们需要知道的是,一个excel文件中就可以包含多个表。且第一个表的索引为0,第二个表索引为1…所以
.read_exce
方法可以指定读取第几个表,
# sheet_name=0,表名, 默认是第一张表
pd.read_excel('test.xlsx')
pd.read_excel('test.xlsx',sheet_name=1)
# 我们也可以指定sheet_name的名字来读取
pd.read_excel('test.xlsx',sheet_name='第二张')
写入
# to 写入
grade.to_csv('文件名.csv')
# 将grade的内容,写入文件名为 '文件名.csv'的文件中去,如果没有,则在当前目录下创建文件。# 不保存第一行数据
grade.to_csv('成绩单.txt',header=None)
# 不保存索引
grade.to_csv('成绩单2.txt',header=None, index=False)# 保存成excel
# 保存到成绩单3.xlsx,并且表名叫做三年二班成绩单
grade.to_excel('成绩单3.xlsx',sheet_name='三年二班成绩单')
Python-Pandas{数据结构与基本功能}相关推荐
- python数据分析包pandas论文_python数据分析pandas包入门学习(一)pandas数据结构介绍...
本文参考<利用python进行数据分析>的第五章 pandas入门python 1 pandas数据结构介绍 pandas有两种主要的数据结构:series和DataFrame Serie ...
- python能实现excel什么功能_Python pandas对excel的操作实现示例
最近经常看到各平台里都有Python的广告,都是对excel的操作,这里明哥收集整理了一下pandas对excel的操作方法和使用过程.本篇介绍 pandas 的 DataFrame 对列 (Colu ...
- Python——pandas模块—Series数据结构
Python--pandas模块-Series数据结构 Python--pandas模块-Series数据结构 pandas Series 创建Series 没有指定索引列时,自动创建:0~~(N-1 ...
- Python Pandas条件筛选功能
来源:https://www.jb51.net/article/239880.htm 这篇文章主要介绍了Python Pandas条件筛选功能,筛选是在平时的工作中使用非常频繁的功能了,下文详细的相关 ...
- Python数据分析——pandas数据结构(DataFrame)
一.pandas数据结构–DataFrame DataFrame 是表格型的数据结构,每列值的数据类型可以不同,也可以相同 DataFrame 常用于二维数据. DataFrame 的属性: valu ...
- Python pandas用法
Python pandas用法 无味之味关注 12019.01.10 15:43:25字数 2,877阅读 91,914 介绍 在Python中,pandas是基于NumPy数组构建的,使数据预处理. ...
- python可以实现哪些功能_Python学习究竟有多强大,Python代码能实现哪些功能
Python究竟有多强大?Python代码能实现哪些功能?众所周知,Python入门简单.功能强大,是人工智能时代最佳的编程语言.但很多人好奇Python究竟有多强大,为什么那么受欢迎?下面就来给大家 ...
- python Pandas SettingwithCopy 警告解决方案
原文链接:https://www.dataquest.io/blog/settingwithcopywarning/ 原文标题:Understanding SettingwithCopyWarning ...
- python收入波动告警分析_使用Python/Pandas分析告警日志数据
作者:吕磊 文章来自微信公众号:平台人生 Python Python是一种面向对象的解释型程序设计语言.作为一种脚本语言,Python在运行性能上相对C/C++等编译型语言有一定不足,但Python语 ...
- csv 20位数据 如何打开可以预览完整数字_干货Python Pandas 做数据分析之玩转 Excel 报表分析...
本篇文章选自作者在 GitChat 的分享,若有什么问题,可在公众号回复「小助手」添加小助手微信,邀请你进入技术交流群. 各位朋友大家好,非常荣幸和大家聊一聊用 Python Pandas 处理 Ex ...
最新文章
- SSL For Free 申请免费https SSL 凭证
- 空间直角坐标系与球面坐标互转
- python lstm_python-Keras中LSTM的补充
- 关于js中的时间——计算时间差等
- 4 个关键步骤打造用户满意的产品体验
- 一文了解分布式一致性算法EPaxos
- ssm使用全注解实现增删改查案例——EmpServiceImpl
- Spring Boot 1.5.x新特性:动态修改日志级别
- eZ Publish 的文章
- SpringBoot配置模板引擎之视图解析器失效问题排查
- gnuplot 常用命令大全
- 室外定位篇:一文解读高精度RTK定位
- 人工智能数学基础:无理数e的由来以及对数、指数函数的求导
- HTML5验证表单内容是否为空
- Unity射击游戏发射子弹的方法和提升流畅性的小技巧
- IC学习笔记——DRV8840
- 小记 百度地图 soso地图 经纬度偏移
- iOS调试技巧(转载)
- PS如何替换瓶盖logo样机下载使用方法
- k8s学习 踩坑之 top nodes - k8s Metrics not available for pod 报错