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。

  1. 首先我们先来回忆一下字典的索引方式。
d = {'a':111, 'b':222,'c':333}
print(d)
'''
{'a': 111, 'b': 222, 'c': 333}'''
print(d['b'])
'''
222
'''
  1. 其实矩阵数组的索引方式也是一样的
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
  1. 字典索引方式 : 比如说:显示索引 蜘蛛侠, 灭霸
    列表索引方式 : 比如说:隐式索引 [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呢?

  1. 传入索引值序列的方式提取数据
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 元利科技
  1. 将这列数据创建成一个 Series,股票名称作为索引,股票代码是数据.
  2. 使用显式索引提取出红塔证券的代码
  3. 使用隐式索引提取新化股份的股票代码
  4. 使用显式索引提取从三只松鼠到中国卫通的股票代码
  5. 使用显式索引提取元利科技,松炀资源,朗进科技的股票代码
  6. 使用隐式索引提取红塔证券中国卫通和海油发展的代码
  7. 使用显式索引和隐式索引分别提取三只松鼠,宏和科技,海油发展的股票代码
  8. 在序列中添加一个新的数据,东方金钰 股票代码为 600086
  9. 在序列中将中国卫通股票代码修改为 666666
  10. 删除掉三只松鼠
  11. 将最后三只股票代码改成 100000
  12. 一次性将中国卫通,宏和科技,海油发展的数据改为 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 的时候,主要有两种思路

  1. 数据为字典类的格式, 是以列的方式进行组织, 字典的 key 将会作为列名,字典的值value作为列的数据.
data = {"年龄":[19, 3000, 30, 37, 40, 1500], "城市":["纽约皇后区", "泰坦星球","费城", "纽约", "哥谭",  "阿斯加德" ],"装备":['蜘蛛战服','无限手套','披风','动力装甲','蝙蝠战衣','雷神之锤']
}  # 冒号前为键。
index = ['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔']
df = pd.DataFrame(data,index = index)
print(df)
'''年龄    城市  装备
蜘蛛侠 19  纽约皇后区   蜘蛛战服
灭霸  3000    泰坦星球    无限手套
奇异博士    30  费城  披风
钢铁侠 37  纽约  动力装甲
蝙蝠侠 40  哥谭  蝙蝠战衣
索尔  1500    阿斯加德    雷神之锤
'''
  1. 数据为列表类形式, 是以行的方式进行组织的, 列名需要用参数传入进去.
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[ ['灭霸','奇异博士','索尔'] ,['装备','城市','装备'] ])
'''装备    城市    装备
灭霸    无限手套  泰坦星球  无限手套
奇异博士    披风    费城    披风
索尔    雷神之锤  阿斯加德  雷神之锤
'''

小练习

  1. 读取 student_grade 数据集,储存在变量 grade 中
grade = pd.read_csv('student_grade.txt',sep='\t')  # 设置分隔符\t
  1. 使用两种方法提取姓名列
grade['姓名']
grade.姓名
  1. 提取语文数学英语三列数据
grade['语文','数学','英语']
  1. 提取从第 10 名到 20 名同学的数据
grade.iloc[9:19]
  1. 提取前十个同学的姓名和总分
grade.iloc[:9,['姓名','总分']]
  1. 提取所有偶数学员的成绩
grade.iloc[::2]
  1. 提取班名次为 第28, 38 ,42 三个同学的总分
grade.loc[[27,37,42 ],['总分']]
  1. 提取行索引为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{数据结构与基本功能}相关推荐

  1. python数据分析包pandas论文_python数据分析pandas包入门学习(一)pandas数据结构介绍...

    本文参考<利用python进行数据分析>的第五章 pandas入门python 1 pandas数据结构介绍 pandas有两种主要的数据结构:series和DataFrame Serie ...

  2. python能实现excel什么功能_Python pandas对excel的操作实现示例

    最近经常看到各平台里都有Python的广告,都是对excel的操作,这里明哥收集整理了一下pandas对excel的操作方法和使用过程.本篇介绍 pandas 的 DataFrame 对列 (Colu ...

  3. Python——pandas模块—Series数据结构

    Python--pandas模块-Series数据结构 Python--pandas模块-Series数据结构 pandas Series 创建Series 没有指定索引列时,自动创建:0~~(N-1 ...

  4. Python Pandas条件筛选功能

    来源:https://www.jb51.net/article/239880.htm 这篇文章主要介绍了Python Pandas条件筛选功能,筛选是在平时的工作中使用非常频繁的功能了,下文详细的相关 ...

  5. Python数据分析——pandas数据结构(DataFrame)

    一.pandas数据结构–DataFrame DataFrame 是表格型的数据结构,每列值的数据类型可以不同,也可以相同 DataFrame 常用于二维数据. DataFrame 的属性: valu ...

  6. Python pandas用法

    Python pandas用法 无味之味关注 12019.01.10 15:43:25字数 2,877阅读 91,914 介绍 在Python中,pandas是基于NumPy数组构建的,使数据预处理. ...

  7. python可以实现哪些功能_Python学习究竟有多强大,Python代码能实现哪些功能

    Python究竟有多强大?Python代码能实现哪些功能?众所周知,Python入门简单.功能强大,是人工智能时代最佳的编程语言.但很多人好奇Python究竟有多强大,为什么那么受欢迎?下面就来给大家 ...

  8. python Pandas SettingwithCopy 警告解决方案

    原文链接:https://www.dataquest.io/blog/settingwithcopywarning/ 原文标题:Understanding SettingwithCopyWarning ...

  9. python收入波动告警分析_使用Python/Pandas分析告警日志数据

    作者:吕磊 文章来自微信公众号:平台人生 Python Python是一种面向对象的解释型程序设计语言.作为一种脚本语言,Python在运行性能上相对C/C++等编译型语言有一定不足,但Python语 ...

  10. csv 20位数据 如何打开可以预览完整数字_干货Python Pandas 做数据分析之玩转 Excel 报表分析...

    本篇文章选自作者在 GitChat 的分享,若有什么问题,可在公众号回复「小助手」添加小助手微信,邀请你进入技术交流群. 各位朋友大家好,非常荣幸和大家聊一聊用 Python Pandas 处理 Ex ...

最新文章

  1. SSL For Free 申请免费https SSL 凭证
  2. 空间直角坐标系与球面坐标互转
  3. python lstm_python-Keras中LSTM的补充
  4. 关于js中的时间——计算时间差等
  5. 4 个关键步骤打造用户满意的产品体验
  6. 一文了解分布式一致性算法EPaxos
  7. ssm使用全注解实现增删改查案例——EmpServiceImpl
  8. Spring Boot 1.5.x新特性:动态修改日志级别
  9. eZ Publish 的文章
  10. SpringBoot配置模板引擎之视图解析器失效问题排查
  11. gnuplot 常用命令大全
  12. 室外定位篇:一文解读高精度RTK定位
  13. 人工智能数学基础:无理数e的由来以及对数、指数函数的求导
  14. HTML5验证表单内容是否为空
  15. Unity射击游戏发射子弹的方法和提升流畅性的小技巧
  16. IC学习笔记——DRV8840
  17. 小记 百度地图 soso地图 经纬度偏移
  18. iOS调试技巧(转载)
  19. PS如何替换瓶盖logo样机下载使用方法
  20. k8s学习 踩坑之 top nodes - k8s Metrics not available for pod 报错

热门文章

  1. 【Python_PyQtGraph 学习笔记(三)】基于GraphicsLayoutWidget实现显示曲线对象 鼠标位置处坐标的功能
  2. 【py spider】读取代理ip文件的几个函数 | 代理ip获取 | TXT
  3. 微信小程序 单选项目 radio 组件
  4. 李开复:成功是让别人离不开你
  5. 4.7.2 在局域网上进行硬件多播
  6. 99. Permutations
  7. STM32定时器秒表
  8. 43、HDR-NeRF
  9. java给视频添加水印_java如何给视频添加水印logo
  10. turtle 画笔运动函数