资讯详情

pandas常用操作

1 - 数据加载和存储

1-1 数据读取

1 读取 Excel 文件

  • 阅读当前目录 招聘网站数据.csv 文件

  • 阅读当前目录 TOP250.xlsx 文件

:使用 pandas 读取 CSV 与 读取 xlsx 格式的 Excel 文件方法大致相同

所以接下来和 Excel 所有相关操作均为 CSV 格式出题。

import pandas as pd data = pd.read_csv("招聘网站数据.csv") data = pd.read_excel("TOP250.xlsx") 

2 读取 Excel 文件|指定位置

在大多数情况下,我们会 notebook 将数据源文件放在同一目录(文件夹下)中,直接使用pd.read_xxx("文件名")读取成功。

但有时需要阅读的文件和 notebook 绝对路径或相对于同一目录下的绝对路径 notebook 的路径。

现在请阅读本套练习第二章的数据,即 2 - 个性化显示设置/个性化显示设置/data.csv

data = pd.read_csv("../2 - 个性化显示设置/个性化显示设置/data.csv") 

3 读取 Excel 文件|指定行(顺序)

阅读当前目录 招聘网站数据.csv 文件的 前20行

data = pd.read_csv("招聘网站数据.csv",nrows = 20) 

4 读取 Excel 文件|指定行(跳过)

阅读当前目录 招聘网站数据.csv 文件并跳过前20行

data = pd.read_csv("招聘网站数据.csv",skiprows = [i for i in range(1,21)]) 

5 读取 Excel 文件|指定行(条件)

阅读当前目录 招聘网站数据.csv 文件中全部偶数行

思考:如果你读了所有的奇数线,或者更多符合指定条件的线?

data = pd.read_csv(招聘网站数据.csv', skiprows=lambda x: (x != 0) and not x % 2)  # data = pd.read_csv(某招聘网站数据.csv', skiprows=lambda x: x % 2) 奇数行 

6 读取 Excel 文件|指定列(列号)

阅读当前目录 招聘网站数据.csv 文件的第 1、3、5

data = pd.read_csv("招聘网站数据.csv",usecols = [0,2,4])

7 读取 Excel 文件|指定列(列名)

读取当前目录下 某招聘网站数据.csv 文件的 positionId、positionName、salary

data = pd.read_csv("某招聘网站数据.csv",usecols = ['positionId','positionName','salary'])

8 读取 Excel 文件|指定列(匹配)

让我们来个更难一点的,还是读取 某招聘网站数据.csv 文件,但现在有一个 list 中包含多个字段👇

usecols = ['positionId','test','positionName', 'test1','salary']

如果 usecols 中的列名存在于 某招聘网站数据.csv 中,则读取。

usecols = ['positionId', 'test', 'positionName', 'test1', 'salary']

data = pd.read_csv('某招聘网站数据.csv', usecols=lambda c: c in set(usecols))

9 读取 Excel 文件|指定索引

读取当前目录下 某招聘网站数据.csv 文件,并在读取时将 positionId 设置为索引列

data = pd.read_csv('某招聘网站数据.csv',index_col=['positionId'])

10 读取 Excel 文件|指定标题

读取当前目录下 某招聘网站数据.csv 文件的 positionId、positionName、salary 列,并将标题设置为 ID、岗位名称、薪资

data = pd.read_csv('某招聘网站数据.csv', usecols=[0,1,17],header = 0,names=['ID','岗位名称','薪资'])

11 读取 Excel 文件|缺失值转换

读取当前目录下 某招聘网站数据.csv 文件,

data = pd.read_csv('某招聘网站数据.csv', keep_default_na=False)

12 读取 Excel 文件|缺失值标记

读取当前目录下 某招聘网站数据.csv 文件,

data = pd.read_csv('某招聘网站数据.csv',na_values=['[]'])

13 读取 Excel 文件|忽略缺失值

读取当前目录下 某招聘网站数据.csv 文件,

data = pd.read_csv("某招聘网站数据.csv",na_filter=False)

14 读取 Excel 文件|指定格式

读取当前目录下 某招聘网站数据.csv 文件,并将 positionId,companyId 设置为字符串格式

data = pd.read_csv("某招聘网站数据.csv", dtype={ 
        'positionId': str,'companyId':str}) 

15 读取 Excel 文件|指定格式(时间)

读取当前目录下 某招聘网站数据.csv 文件,并将 createTime 列设置为字符串格式

data = pd.read_csv("某招聘网站数据.csv",parse_dates=['createTime']) 

16 读取 Excel 文件|分块读取

读取当前目录下 某招聘网站数据.csv 文件,要求返回一个可迭代对象,每次读取 10 行

data = pd.read_csv("某招聘网站数据.csv", chunksize= 10)

17 读取 txt 文件|常规

读取当前目录下 Titanic.txt 文件。

注意:在接下来的几种格式文件读取中,对于之前重复的参数/功能将不再整理,仅介绍读取功能。

data = pd.read_table("Titanic.txt")

18 读取 txt 文件|含中文

读取当前目录下 TOP250.txt 文件。

data = pd.read_table("TOP250.txt",encoding='gb18030')

# data = pd.read_csv("TOP250.txt",encoding='gb18030',sep = '\t') # 使用 read_csv 也可

19 读取 JSON 文件

读取当前目录下 某基金数据.json 文件。

data = pd.read_json("某基金数据.json")

20 读取 HDF5 文件

HDF5是一种特殊的文件格式,常见于在大规模存储数据上

关于 pandashdf5 格式文件的操作较多,下面仅学习如何读取。

读取当前目录下store_tl.h5文件

data = pd.read_hdf("store_tl.h5", "table")

21 从剪贴板读取数据

打开当前目录下 Titanic.txt 文件,全选并复制。

现在直接从剪贴板读取数据。

data = pd.read_clipboard()

22 从 SQL 读取数据

有时我们需要从 SQL 中读取数据,如果先将数据导出再pandas读取并不是一个合适的选择。

pandas 中支持直接从 sql 中查询并读取。

为了方便统一操作,请先执行下面的代码创建数据。

pd.read_sql('SELECT int_column, date_column FROM test_data', conn)
#下面将 `SQL` 语句 `SELECT int_column, date_column FROM test_data` 转换为 `DataFrame`

23 从网页读取数据

直接从东京奥运会官网读取奖牌榜数据。

目标网站地址为 https://olympics.com/tokyo-2020/olympic-games/zh/results/all-sports/medal-standings.htm

data = pd.read_html("https://olympics.com/tokyo-2020/olympic-games/zh/results/all-sports/medal-standings.htm")[0]

24 循环读取数据

在本小节 demodata 文件夹下有多个 Excel 文件,要求一次性循环读取全部文件

import os
path = 'demodata/'
filesnames = os.listdir(path)
filesnames = [f for f in filesnames if f.lower().endswith(".xlsx")]
df_list = []
for filename in filesnames:
    df_list.append(pd.read_excel(path + filename))

df = pd.concat(df_list)

1-2 数据创建

除了直接读取本地文件,学会直接创建数据框也很重要,常见于测试一些函数,下面是从常见数据结构创建数据框的方法整理

25 从列表创建

将下面的 list 转换为 dataframe,并指定列名为"早起Python"

l = [1,2,3,4,5]
data = pd.DataFrame(l,columns=['早起Python'])

26 从列表创建|嵌套列表

将下面的 list 转换为 dataframe,并指定行索引为"公众号","早起Python"

l = [[1,2,3],[4,5,6]]
data = pd.DataFrame(l,index=['公众号','早起Python'])

27 从字典创建

d = { 
        
    "one": pd.Series([1.0, 2.0, 3.0], index=["a", "b", "c"]),
    "two": pd.Series([1.0, 2.0, 3.0, 4.0], index=["a", "b", "c", "d"]) }
data = pd.DataFrame(d)

28 从字典创建|指定索引

还是上一题的字典d,将其转换为dataframe并指定索引顺序为 d、b、a

data = pd.DataFrame(d, index=["d", "b", "a"])

29 从字典创建|指定列名

还是上一题的字典d,将其转换为dataframe并指定索引顺序为 d、b、a,列名为"two", "three"

data = pd.DataFrame(d, index=["d", "b", "a"], columns=["two", "three"])

30 从字典创建|字典列表

将下方列表型字典转换为dataframe

思考:如何指定行/列索引?

d = [{ 
        "a": 1, "b": 2}, { 
        "a": 5, "b": 10, "c": 20}]
data = pd.DataFrame(data2)

31 从集合创建

将下面的元组转换为 dataframe 且行列索引均为 1,2,3,4

t =((1,0,0,0,),(2,3,0,0,),(4,5,6,0,),(7,8,9,10,))
data = pd.DataFrame(t, columns=[1,2,3,4], index=[1,2,3,4])

1-3 数据存储

32 保存为 CSV

将第三题读取到的数据保存为 csv 格式至当前目录下(文件名任意)

data.to_csv("out.csv",encoding = 'utf_8_sig')

33 保存为 CSV|指定列

将第三题读取到的数据保存为 csv 格式至当前目录下(文件名任意),且只保留positionName、salary两列

data.to_csv("out.csv",encoding = 'utf_8_sig',columns=['positionName','salary'])

34 保存为 CSV|取消索引

将第三题读取到的数据保存为 csv 格式至当前目录下(文件名任意),且取消每一行的索引

data.to_csv("out.csv",encoding = 'utf_8_sig',index = False)

35 保存为 CSV|标记缺失值

在上一题的基础上,在保存的同时,将缺失值标记为'数据缺失'

data.to_csv("out.csv",encoding = 'utf_8_sig',index = False,na_rep = '数据缺失')

36 保存为CSV|压缩

将上一题的数据保存至 zip 文件,解压后出现 out.csv

compression_opts = dict(method='zip',
                        archive_name='out.csv')  
data.to_csv('out.zip', index=False,
          compression=compression_opts)  

37 保存为 Excel

将第三题读取到的数据保存为 xlsx 格式至当前目录下(文件名任意)

data.to_excel("test.xlsx")

38 保存为 JSON

将之前的数据保存为 json 格式至当前目录下(文件名任意)

data.to_json("out.json")

39 保存为 Markdown

将之前数据转换为 markdown 形式表格,这样可以直接复制进 .md 文件中使用

data.head().to_markdown(index = None)

40 保存为 Html

将之前的数据保存为 html 格式至当前目录下(文件名任意),并进行如下设置

  • 取消行索引
  • 标题居中对齐
  • 列宽100
data.to_html("out.html", col_space=100,index = None,justify = 'center',border = 1)

2 - pandas 个性化显示设置

2-1 基于 option 修改显示设置

pandas 中有一个 option 系统,可以通过 set_option方法进行进阶显示选项设置。

本小节主要整理了一些基于 option 修改数据显示的设置。

注意【】并未修改数据,仅是在原有数据基础上优化显示状态,随时可以通过重置选项重置全部设置,恢复数据默认显示状态。

1 显示全部列

如下图所示👇,直接查看 data 会发现,由于数据维度较大,部分行列会被折叠,显示为...,现在需要显示全部的列方便预览。

pd.set_option('display.max_columns', None) #显示全部列
# pd.set_option('display.max_rows', None) # 显示全部行

2 显示指定行/列

指定让 data 在预览时显示10列,7行

pd.set_option('display.max_columns', 10)  
pd.set_option('display.max_rows', 7)

3 还原行/列显示数

还原上面的显示设置
pd.reset_option("max_rows")
pd.reset_option("max_columns")

4 修改每列最大字符宽度

即每列最多显示的字符长度,例如【每列最多显示10个字符,多余的会变成...

pd.set_option ('display.max_colwidth',10)

5 修改小数点精度

修改默认显示精度为小数点后5位

pd.set_option('precision', 5)

6 还原所有显示设置

还原上面的全部显示设置

pd.reset_option("^display")

2-2 更多 option 相关设置

7 忽略警告

取消pandas相关warning提示

pd.set_option("mode.chained_assignment", None) 
# 全局取消warning
# import warnings
# warnings.filterwarnings('ignore')

8 设置数值显示条件

如果数值小于 20 则显示为0

pd.set_option('chop_threshold', 20) 

9 让 pandas 支持 LaTex

dataframe中内容支持 Latex 显示(需要使用$$包住)

pd.set_option("display.html.use_mathjax",True)

10 修改默认绘图引擎

修改pandas默认绘图引擎为plotly(需要提前安装好plotly

pd.set_option("plotting.backend","plotly")

11 还原所有 option 设置

还原上面全部 option 设置

pd.reset_option("all") 

彩蛋

如何设置在预览数据时,不换行显示每列内容?

2-3 基于 style 个性化设置

上面基于 optionpandas 相关设置是全局配置,一次设置会在关闭notebook前一直有效

但相关常用的设置并不多,不能满足更多的个性化需求。

幸运的是在 pandas 中提供 Styler 对象让我们进一步个性化展示数据。

本节我就将一些常用的基于 style 个性化设置整理为习题模式方便大家学习、巩固。

注意:基于 style 个性化设置,所有 data.style.xxxx 输出的数据均是一次性的(可以复用、导出),因此你应该在合适的时间选择使用该方法。 下面仅列举常用的方法,若想了解更多可以查阅

重新加载数据

为了方便理解,重新读取data.csv

  • 'positionName'
  • 'createTime'(设置为时间格式)
  • 'salary'
  • 'subwayline'
  • 'matchScore'
data = pd.read_csv("data.csv", usecols=[
                   'positionName', 'createTime', 'salary', 'subwayline', 'matchScore'], nrows=20, parse_dates=['createTime'])

12 隐藏索引

隐藏索引列

data.style.hide_index()

13 调整精度

将带有小数点的列精度调整为小数点后2位

data.style.set_precision(2)

14 标记缺失值

(data
.style
.set_na_rep("数据缺失"))

15 高亮缺失值

将缺失值高亮,颜色名skyblue

(data
.style
.set_na_rep("数据缺失")
.highlight_null(null_color='skyblue'))

16 高亮数值列最大值

将 数值格式列的最大值进行高亮
data.style.highlight_max()

17 高亮数值列最小值

将 数值格式列的最小值进行高亮
data.style.highlight_min()

18 同时高亮最大最小值

同时高亮最大值(颜色代码为#F77802)与最小值(颜色代码为#26BE49

(data
.style
.highlight_max(color='#F77802')
.highlight_min(color='#26BE49'))

19 指定格式高亮

高亮 salary 列范围在 3000 - 10000 的数值

(data
.style
.highlight_between(left=3000, right=10000, subset=['salary']))

20 渐变显示数值列

将数值格式的列使用渐变色(绿色)进行显示,以突出趋势

import seaborn as sns

cm = sns.light_palette("green", as_cmap=True)

(data
.style
.background_gradient(cmap=cm))

21 修改字体颜色

salary 列修改为红色字体

(data
.style
.set_properties(
    subset=['salary'], **{ 
        'color': 'red'}))

22 修改背景颜色、对齐方式、字体大小

将整个 dataframe 进行如下设置:

  • 居中
  • 背景色修改为 #F8F8FF
  • 字体:13px
(data
.style
.set_properties(**{ 
        'background-color': '#F8F8FF','text-align':'center', 'font-size': '13px'}))

23 综合(链式)设置

除了上面的单个设置,还可以将多个设置进行结合,下面对整个 dataframe 进行如下设置:

  • 居中
  • 背景色修改为 #F8F8FF
  • 字体:13px

并将 salary 列字体修改为红色

(data
.style
.set_properties(**{ 
        'background-color': '#F8F8FF','text-align':'center', 'font-size': '13px'})
.set_properties(
    subset=['salary'], **{ 
        'color': 'red'}))

24 导出样式

将上一题带有样式的 pandas 数据框导出为本地 Excel(.xlsx格式)

(data
.style
.set_properties(**{ 
        'background-color': '#F8F8FF','text-align':'center', 'font-size': '13px'})
.set_properties(
    subset=['salary'], **{ 
        'color': 'red'})).to_excel('带有样式导出.xlsx')

25 制作指定列条形图

pandas 中对 salary 列使用条形图进行可视化,指定颜色skyblue

(data
.style
.bar(subset=['salary'],color='skyblue'))

26 带有条件的样式(自定义样式)

salary 列数值大于 30000 的单元格字体修改为红色

def my_style(val):

    color = 'red' if val > 30000 else 'black'
    return 'color: %s' % color


data.style.applymap(my_style, subset="salary")

27 格式化输出日期类型

createTime 列格式化输出为 xx年xx月xx日

链接

28 指定(自定义)格式化数据

标签: s3urd交流电压变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台