当前位置: 首页 > news >正文

Python 之 Pandas 文件操作和读取 CSV 参数详解

文章目录

  • 一、Pandas 读取文件
  • 二、CSV 文件读取
    • 1. 基本参数
    • 2. 通用解析参数
    • 3. 空值处理相关参数
    • 4. 时间处理相关参数
    • 5. 分块读入相关参数

一、Pandas 读取文件

  • 当使用 Pandas 做数据分析的时,需要读取事先准备好的数据集,这是做数据分析的第一步。Panda 提供了多种读取数据的方法,针对不同的文件格式,有以下几种:
  • (1) read_csv() 用于读取文本文件。
  • (2) read_excel() 用于读取文本文件。
  • (3) read_json() 用于读取 json 文件。
  • (4) read_sql_query() 读取 sql 语句的。
  • 其通用的流程如下:
  • (1) 导入库 import pandas as pd。
  • (2) 找到文件所在位置(绝对路径 = 全称)(相对路径 = 和程序在同一个文件夹中的路径的简称)。
  • (3) 变量名 = pd.读写操作方法(文件路径,具体的筛选条件,……)。

二、CSV 文件读取

  • CSV 又称逗号分隔值文件,是一种简单的文件格式,以特定的结构来排列表格数据。 CSV 文件能够以纯文本形式存储表格数据,比如电子表格、数据库文件,并具有数据交换的通用格式。CSV 文件会在 Excel 文件中被打开,其行和列都定义了标准的数据格式。
  • 将 CSV 中的数据转换为 DataFrame 对象是非常便捷的。和一般文件读写不一样,它不需要你做打开文件、读取文件、关闭文件等操作。相反,您只需要一行代码就可以完成上述所有步骤,并将数据存储在 DataFrame 中。
  • 下面进行实例演示,源数据如下:

在这里插入图片描述

  • 首先,我们对 CSV 文件进行读取,可以通过相对路径,也可以通过 os 动态取得绝对路径 os.getcwd() os.path.json。
import pandas as pd
df = pd.read_csv("./data/my_csv.csv")
print(df,type(df))
#   col1 col2  col3    col4      col5
#0     2    a   1.4   apple  2022/1/1
#1     3    b   3.4  banana  2022/1/2
#2     6    c   2.5  orange  2022/1/5
#3     5    d   3.2   grape  2022/1/7 <class 'pandas.core.frame.DataFrame'>
  • 我们可以通过 os.getcwd() 读取文件的存储路径。
import os
os.getcwd()
#'C:\\Users\\CQB\\Desktop\\内蒙农业大学数据分析教案和代码\\第16天'
  • 其语法模板如下:
read_csv(filepath_or_buffer, sep=',',  header='infer', names=None, index_col=None, usecols=None, squeeze=None, prefix=None, 
mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, 
skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, 
skip_blank_lines=True, parse_dates=None, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False,
cache_dates=True, iterator=False, chunksize=None, compression='infer', thousands=None, decimal='.', lineterminator=None, 
quotechar='"', quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, encoding_errors='strict', dialect=None, 
error_bad_lines=None, warn_bad_lines=None, on_bad_lines=None, delim_whitespace=False, low_memory=True, memory_map=False, 
float_precision=None, storage_options=None)

1. 基本参数

  • (1) filepath_or_buffer(数据输入的路径):可以是文件路径、可以是 URL,也可以是实现 read 方法的任意对象。这个参数,就是我们输入的第一个参数。
  • 我们可以直接 read_csv 读取我们想要的文件。
import pandas as pd
pd.read_csv(r"data\students.csv")
#id	name	address	gender	birthday
#0	1	朱梦雪	地球村	女	2004/11/2
#1	2	许文博	月亮星	女	2003/8/7
#2	3	张兆媛	艾尔星	女	2004/11/2
#3	4	付延旭	克哈星	男	2003/10/11
#4	5	王杰	查尔星	男	2002/6/12
#5	6	董泽宇	塔桑尼斯	男	2002/2/12
  • 还可以是一个 URL,如果访问该 URL 会返回一个文件的话,那么 pandas 的 read_csv函 数会自动将该文件进行读取。比如:我们服务器上放的数据,将刚才的文件返回。
  • 但需要注意的是,他需要网络请求,因此读取文件比较慢。
pd.read_csv("http://my-teaching.top/static/data/students.csv") 
  • 里面还可以是一个 _io.TextIOWrapper,其中,pandas 默认使用 utf-8 读取文件,比如:
f = open(r"data\students.csv", encoding="utf-8")
pd.read_csv(f)
#id	name	address	gender	birthday
#0	1	朱梦雪	地球村	女	2004/11/2
#1	2	许文博	月亮星	女	2003/8/7
#2	3	张兆媛	艾尔星	女	2004/11/2
#3	4	付延旭	克哈星	男	2003/10/11
#4	5	王杰	查尔星	男	2002/6/12
#5	6	董泽宇	塔桑尼斯	男	2002/2/12
  • (2) sep:读取 csv 文件时指定的分隔符,默认为逗号。注意:csv 文件的分隔符和我们读取 csv 文件时指定的分隔符一定要一致。
import pandas as pd
pd.read_csv(r"data\students_step.csv")
#id|name|address|gender|birthday
#0	1|朱梦雪|地球村|女|2004/11/2
#1	2|许文博|月亮星|女|2003/8/7
#2	3|张兆媛|艾尔星|女|2004/11/2
#3	4|付延旭|克哈星|男|2003/10/11
#4	5|王杰|查尔星|男|2002/6/12
#5	6|董泽宇|塔桑尼斯|男|2002/2/12
  • 由于指定的分隔符和 csv 文件采用的分隔符不一致,因此多个列之间没有分开,而是连在一起了。 所以,我们需要将分隔符设置成 \t 才可以。
df = pd.read_csv(r"data\students_step.csv", sep="|")
df
#id	name	address	gender	birthday
#0	1	朱梦雪	地球村	女	2004/11/2
#1	2	许文博	月亮星	女	2003/8/7
#2	3	张兆媛	艾尔星	女	2004/11/2
#3	4	付延旭	克哈星	男	2003/10/11
#4	5	王杰	查尔星	男	2002/6/12
#5	6	董泽宇	塔桑尼斯	男	2002/2/12
  • (3) delim_whitespace:默认为 False,设置为 True 时,表示分割符为空白字符,可以是空格、\t 等等。不管分隔符是什么,只要是空白字符,那么可以通过 delim_whitespace=True 进行读取。
  • 如下,我们对 delim_whitespace 不设置,也就是默认为 False,会发现读取有点问题。
df = pd.read_csv(r"data\students_whitespace.txt", sep=" ")
df
#id	name	address	gender	birthday
#0	1	朱梦雪	地球村	女	2004/11/2
#1	2	许文博\t月亮星	女	2003/8/7	NaN
#2	3	张兆媛	艾尔星	女	2004/11/2
#3	4	付延旭	克哈星	男	2003/10/11
#4	5	王杰\t查尔星	男	2002/6/12	NaN
#5	6	董泽宇\t塔桑尼斯	男	2002/2/12	NaN
  • 对此,我们将 delim_whitespace 设置为 True,便会得到我们想要的读取结果。
df = pd.read_csv(r"data\students_whitespace.txt", delim_whitespace=True)
df
#id	name	address	gender	birthday
#0	1	朱梦雪	地球村	女	2004/11/2
#1	2	许文博	月亮星	女	2003/8/7
#2	3	张兆媛	艾尔星	女	2004/11/2
#3	4	付延旭	克哈星	男	2003/10/11
#4	5	王杰	查尔星	男	2002/6/12
#5	6	董泽宇	塔桑尼斯	男	2002/2/12
  • (4) header:用作列名的行号,以及数据的开头。
  • 默认行为是推断列名:如果没有传递任何名称,则该行为与 header=0 相同,并且从文件的第一行推断列名,如果显式传递列名,则该行为与 header=None 相同。
  • 显式传递 header=0 以替换现有名称。标题可以是整数列表,指定列上多索引的行位置,例如 [0,1,3]。未指定的中间行将被跳过(例如,本例中跳过 2 行)。
  • 这里需要注意,如果 skip_blank_lines=True,此参数将忽略注释行和空行,因此 header=0 表示数据的第一行,而不是文件的第一行。
  • (5) names:当 names 没被赋值时,header 会变成 0,即选取数据文件的第一行作为列名;当 names 被赋值,header 没被赋值时,那么 header 会变成 None。如果都赋值,就会实现两个参数的组合功能。
  • (a) names 没有被赋值,header 也没赋值:
  • 这种情况下,header 为 0,即选取文件的第一行作为表头。
pd.read_csv(r"data\students.csv")
#id	name	address	gender	birthday
#0	1	朱梦雪	地球村	女	2004/11/2
#1	2	许文博	月亮星	女	2003/8/7
#2	3	张兆媛	艾尔星	女	2004/11/2
#3	4	付延旭	克哈星	男	2003/10/11
#4	5	王杰	查尔星	男	2002/6/12
#5	6	董泽宇	塔桑尼斯	男	2002/2/12
  • (b) names 没有被赋值,header 被赋值:
  • 如果不指定 names,指定 header 为 1,则选取第二行当做表头,第二行下面为数据。
pd.read_csv(r"data\students.csv", header=1)
#1	朱梦雪	地球村	女	2004/11/2
#0	2	许文博	月亮星	女	2003/8/7
#1	3	张兆媛	艾尔星	女	2004/11/2
#2	4	付延旭	克哈星	男	2003/10/11
#3	5	王杰	查尔星	男	2002/6/12
#4	6	董泽宇	塔桑尼斯	男	2002/2/12
  • (c) names 被赋值,header 没有被赋值:
pd.read_csv(r"data\students.csv", names=["编号", "姓名", "地址", "性别", "出生日期"])
#编号	姓名	地址	性别	出生日期
#0	id	name	address	gender	birthday
#1	1	朱梦雪	地球村	女	2004/11/2
#2	2	许文博	月亮星	女	2003/8/7
#3	3	张兆媛	艾尔星	女	2004/11/2
#4	4	付延旭	克哈星	男	2003/10/11
#5	5	王杰	查尔星	男	2002/6/12
#6	6	董泽宇	塔桑尼斯	男	2002/2/12
  • 可以看到,names 适用于没有表头的情况,指定 names 没有指定 header,那么 header 相当于 None。
  • 一般来说,读取文件的时候会有一个表头,一般默认是第一行,但是有的文件中是没有表头的,那么这个时候就可以通过 names 手动指定、或者生成表头,而文件里面的数据则全部是内容。
  • 所以这里 id、name、address、date 也当成是一条记录了,本来它是表头的,但是我们指定了 names,所以它就变成数据了,表头是我们在 names 里面指定的。
  • (a) names 和 header 都被赋值:
pd.read_csv(r"data\students.csv",names=["编号", "姓名", "地址", "性别", "出生日期"],header=1)
#编号	姓名	地址	性别	出生日期
#0	2	许文博	月亮星	女	2003/8/7
#1	3	张兆媛	艾尔星	女	2004/11/2
#2	4	付延旭	克哈星	男	2003/10/11
#3	5	王杰	查尔星	男	2002/6/12
#4	6	董泽宇	塔桑尼斯	男	2002/2/12
  • 这个时候,相当于先不看 names,只看 header,header 为 0 代表先把第一行当做表头,下面的当成数据;然后再把表头用 names 给替换掉。
  • names 和 header 的使用场景主要如下:
  • (1) csv 文件有表头并且是第一行,那么 names 和 header 都无需指定;
  • (2) csv 文件有表头、但表头不是第一行,可能从下面几行开始才是真正的表头和数据,这个时候指定 header 即可;
  • (3) csv 文件没有表头,全部是纯数据,那么我们可以通过 names 手动生成表头;
  • (4) csv 文件有表头、但是这个表头你不想用,这个时候同时指定 names 和 header。先用 header 选出表头和数据,然后再用 names 将表头替换掉,就等价于将数据读取进来之后再对列名进行 rename。
  • (6) index_col:我们在读取文件之后所得到的 DataFrame 的索引默认是 0、1、2……,我们可以通过 set_index 设定索引,但是也可以在读取的时候就指定某列为索引。
df = pd.read_csv(r"data\students.csv", index_col="birthday")
df
#           id	 name  address gender
#birthday				
#2004/11/2	1	朱梦雪	地球村	女
#2003/8/7	2	许文博	月亮星	女
#2004/11/2	3	张兆媛	艾尔星	女
#2003/10/11	4	付延旭	克哈星	男
#2002/6/12	5	王杰	查尔星	男
#2002/2/12	6	董泽宇	塔桑尼斯 男
  • 也可以用来删除指定列。
df.index=df['birthday']
del df['birthday']
df
#          id	name	address	gender
#birthday				
#2004/11/2	1	朱梦雪	地球村	女
#2003/8/7	2	许文博	月亮星	女
#2004/11/2	3	张兆媛	艾尔星	女
#2003/10/11	4	付延旭	克哈星	男
#2002/6/12	5	王杰	查尔星	男
#2002/2/12	6	董泽宇	塔桑尼斯	男
  • 我们在读取的时候指定了 name 列作为索引; 此外,除了指定单个列,还可以指定多列作为索引,比如 [“id”, “name”]。同时,我们除了可以输入列名外,还可以输入列对应的索引。比如:“id”、“name”、“address”、"date"对应的索引就分别是 0、1、2、3。
df2 = pd.read_csv(r"data\students.csv", index_col=["gender","birthday"])
df2
#             id	name	address
#gender	birthday			
#女	2004/11/2	1	朱梦雪	地球村
#   2003/8/7	2	许文博	月亮星
#   2004/11/2	3	张兆媛	艾尔星
#男	2003/10/11	4	付延旭	克哈星
#   2002/6/12	5	王杰	查尔星
#   2002/2/12	6	董泽宇	塔桑尼斯
  • 使用 loc 删选也是同样的道理。
df2.loc["女"]
#         id	name	address
#birthday			
#2004/11/2	1	朱梦雪	地球村
#2003/8/7	2	许文博	月亮星
#2004/11/2	3	张兆媛	艾尔星
  • (7) usecols:返回列的子集。
  • 如果是类似列表的,则所有元素都必须是位置性的(即文档列中的整数索引),或者是与用户在名称中提供的列名或从文档标题行推断的列名相对应的字符串。如果给出了名称,则不考虑文档标题行。
pd.read_csv(r"data\students.csv", usecols=["name","birthday"])
#   name
#0	朱梦雪
#1	许文博
#2	张兆媛
#3	付延旭
#4	王杰
#5	董泽宇

2. 通用解析参数

  • (1) encoding:表示这只编码格式,utf-8,gbk。
pd.read_csv(r"data\students_gbk.csv") # UnicodeDecodeError 
  • 如果提示错误喂 UnicodeDecodeError —> 需要想到编码问题。
  • pandas 默认使用 utf-8 格式读取。
pd.read_csv(r"data\students_gbk.csv", encoding="gbk") 
#id	name	address	gender	birthday
#0	1	朱梦雪	地球村	女	2004/11/2
#1	2	许文博	月亮星	女	2003/8/7
#2	3	张兆媛	艾尔星	女	2004/11/2
#3	4	付延旭	克哈星	男	2003/10/11
#4	5	王杰	查尔星	男	2002/6/12
#5	6	董泽宇	塔桑尼斯	男	2002/2/12
  • (2) dtype:在读取数据的时候,设定字段的类型。
  • 比如,公司员工的 id 一般是:00001234,如果默认读取的时候,会显示为 1234,所以这个时候要把他转为字符串类型,才能正常显示为 00001234。
df = pd.read_csv(r"data\students_step_001.csv", sep="|")
df
#id	name	address	gender	birthday
#0	1	朱梦雪	地球村	女	2004/11/2
#1	2	许文博	月亮星	女	2003/8/7
#2	3	张兆媛	艾尔星	女	2004/11/2
#3	4	付延旭	克哈星	男	2003/10/11
#4	5	王杰	查尔星	男	2002/6/12
#5	6	董泽宇	塔桑尼斯	男	2002/2/12
  • 我们将 id 的数据类型设置为字符串,便可以显示为 001 之类的。
df = pd.read_csv(r"data\students_step_001.csv", sep="|", dtype ={"id":str}) 
df
#id	name	address	gender	birthday
#0	001	朱梦雪	地球村	女	2004/11/2
#1	002	许文博	月亮星	女	2003/8/7
#2	003	张兆媛	艾尔星	女	2004/11/2
#3	004	付延旭	克哈星	男	2003/10/11
#4	005	王杰	查尔星	男	2002/6/12
#5	006	董泽宇	塔桑尼斯	男	2002/2/12
  • (3) converters:在读取数据的时候对列数据进行变换.
  • 例如将 id 增加 10,但是注意 int(x),在使用 converters 参数时,解析器默认所有列的类型为 str,所以需要进行类型转换。
pd.read_csv('data\students.csv', converters={"id": lambda x: int(x) + 10})
#id	name	address	gender	birthday
#0	11	朱梦雪	地球村	女	2004/11/2
#1	12	许文博	月亮星	女	2003/8/7
#2	13	张兆媛	艾尔星	女	2004/11/2
#3	14	付延旭	克哈星	男	2003/10/11
#4	15	王杰	查尔星	男	2002/6/12
#5	16	董泽宇	塔桑尼斯	男	2002/2/12
  • (4) true_values 和 false_values:指定哪些值应该被清洗为 True,哪些值被清洗为 False。
  • 我们以性别为例,男设置为 True,女设置为 False。
pd.read_csv('data\students.csv', true_values=['男'], false_values=['女'])
#   id	name	address	gender	birthday
#0	1	朱梦雪	地球村	False	2004/11/2
#1	2	许文博	月亮星	False	2003/8/7
#2	3	张兆媛	艾尔星	False	2004/11/2
#3	4	付延旭	克哈星	True	2003/10/11
#4	5	王杰	查尔星	True	2002/6/12
#5	6	董泽宇	塔桑尼斯	True	2002/2/12
  • 这里的替换规则为,只有当某一列的数据类别全部出现在 true_values + false_values 里面,才会被替换。
  • (5) skiprows:表示过滤行,想过滤掉哪些行,就写在一个列表里面传递给 skiprows 即可。注意的是,这里是先过滤,然后再确定表头,比如:
pd.read_csv('data\students.csv', skiprows=[0,3])
#   1	朱梦雪	地球村	女	2004/11/2
#0	2	许文博	月亮星	女	2003/8/7
#1	4	付延旭	克哈星	男	2003/10/11
#2	5	王杰	查尔星	男	2002/6/12
#3	6	董泽宇	塔桑尼斯	男	2002/2/12
  • 这里把第一行过滤掉了,因为第一行是表头,所以在过滤掉之后第二行就变成表头了。 当然里面除了传入具体的数值,来表明要过滤掉哪些行,还可以传入一个函数。
pd.read_csv('data\students.csv', skiprows=lambda x: x > 0 and x % 2 == 0)
#  id	name	address	gender	birthday
#0	1	朱梦雪	地球村	女	2004/11/2
#1	3	张兆媛	艾尔星	女	2004/11/2
#2	5	王杰	查尔星	男	2002/6/12
  • 由于索引从 0 开始,所以凡是索引大于 0、并且%2 等于 0 的记录都过滤掉。索引大于 0,是为了保证表头不被过滤掉。
  • (6) skipfooter:表示从文件末尾过滤行。
pd.read_csv('data\students.csv', skipfooter=1)
  • 上述代码运行后会出现报错,并且表格中的数据都变成乱码,具体原因下方有解释。
pd.read_csv('data\students.csv', skipfooter=1, engine="python", encoding="utf-8")
#  id	name	address	gender	birthday
#0	1	朱梦雪	地球村	女	2004/11/2
#1	2	许文博	月亮星	女	2003/8/7
#2	3	张兆媛	艾尔星	女	2004/11/2
#3	4	付延旭	克哈星	男	2003/10/11
#4	5	王杰	查尔星	男	2002/6/12
  • pandas 解析数据时用的引擎,目前解析引擎有两种:c、python。默认为 c,因为 c 引擎解析速度更快,但是特性没有 python 引擎全。
  • skipfooter 接收整型,表示从结尾往上过滤掉指定数量的行,因为引擎退化为 python,那么要手动指定 engine=“python”,不然会警告。另外需要指定 encoding=“utf-8”,因为 csv 存在编码问题,当引擎退化为 python 的时候,在 Windows 上读取会乱码。
  • (7) nrows:表示设置一次性读入的文件行数,在读入大文件时很有用,比如 16G 内存的 PC 无法容纳几百 G 的大文件。
pd.read_csv('data\students.csv', nrows=3)
#  id	name	address	gender	birthday
#0	1	朱梦雪	地球村	女	2004/11/2
#1	2	许文博	月亮星	女	2003/8/7
#2	3	张兆媛	艾尔星	女	2004/11/2

3. 空值处理相关参数

  • na_values:该参数可以配置哪些值需要处理成 NaN。
pd.read_csv('data\students.csv', na_values=["女", "朱梦雪"])#id	name	address	gender	birthday
#0	1	NaN	地球村	NaN	2004/11/2
#1	2	许文博	月亮星	NaN	2003/8/7
#2	3	张兆媛	艾尔星	NaN	2004/11/2
#3	4	付延旭	克哈星	男	2003/10/11
#4	5	王杰	查尔星	男	2002/6/12
#5	6	董泽宇	塔桑尼斯	男	2002/2/12
  • 可以看到将女和朱梦雪设置成了NaN,这里的情况是不同的列中包含了不同的值。

4. 时间处理相关参数

  • parse_dates:指定某些列为时间类型,这个参数一般搭配 date_parser 使用。
  • date_parser:是用来配合 parse_dates 参数的,因为有的列虽然是日期,但没办法直接转化,需要我们指定一个解析格式。
df = pd.read_csv('data\students.csv')
df.dtypes
#id           int64
#name        object
#address     object
#gender      object
#birthday    object
#dtype: object
  • 我们通过 parse_dates 将 birthday 设置为时间类型。
df = pd.read_csv('data\students.csv', parse_dates=["birthday"])
df.dtypes
#id                   int64
#name                object
#address             object
#gender              object
#birthday    datetime64[ns]
#dtype: object

5. 分块读入相关参数

  • (1) iterator:迭代器,iterator 为 bool 类型,默认为 False。
  • 如果为 True,那么返回一个 TextFileReader 对象,以便逐块处理文件。这个在文件很大、内存无法容纳所有数据文件时,可以分批读入,依次处理。
chunk = pd.read_csv('data\students.csv', iterator=True)
chunk
#<pandas.io.parsers.TextFileReader at 0x1b27f00ef88>
  • 我们已经对文件进行了分块操作,可以先提取出前两行。
print(chunk.get_chunk(2))
#   id name address gender   birthday
#0   1  朱梦雪     地球村      女  2004/11/2
#1   2  许文博     月亮星      女   2003/8/7
  • 文件还剩下四行,但是我们指定读取100,那么也不会报错,不够指定的行数,那么有多少返回多少。
print(chunk.get_chunk(100))
#   id name address gender    birthday
#2   3  张兆媛     艾尔星      女   2004/11/2
#3   4  付延旭     克哈星      男  2003/10/11
#4   5   王杰     查尔星      男   2002/6/12
#5   6  董泽宇    塔桑尼斯      男   2002/2/12
  • 这里需要注意的是,在读取完毕之后,再读的话就会报错了。
  • (2) chunksize:整型,默认为 None,设置文件块的大小。
  • chunksize 还是返回一个类似于迭代器的对象,当我们调用 get_chunk,如果不指定行数,那么就是默认的 chunksize。
chunk = pd.read_csv('data\students.csv', chunksize=2)
print(chunk)  
print(chunk.get_chunk())
#<pandas.io.parsers.TextFileReader object at 0x000001B27F05C5C8>
#   id name address gender   birthday
#0   1  朱梦雪     地球村      女  2004/11/2
#1   2  许文博     月亮星      女   2003/8/7
  • 我们再使用两次 print(chunk.get_chunk()) 就可以分步读取出所有的数据,因为这里的 chunksize 设置为 2。
  • 我们也可以指定 chunk.get_chunk() 的参数。
  • 以上便是 pandas 的 read_csv 函数中绝大部分参数了,同时其中的部分参数也适用于读取其它类型的文件。
  • 其实在读取 csv 文件时所使用的参数不多,很多参数平常我们都不会用到的,不过不妨碍我们了解一下,因为在某些特定的场景下它们是可以很方便地帮我们解决一些问题的。
  • 个人感觉分块读取这个参数最近在工作中提高了很大的效率。

相关文章:

Python 之 Pandas 文件操作和读取 CSV 参数详解

文章目录一、Pandas 读取文件二、CSV 文件读取1. 基本参数2. 通用解析参数3. 空值处理相关参数4. 时间处理相关参数5. 分块读入相关参数一、Pandas 读取文件 当使用 Pandas 做数据分析的时&#xff0c;需要读取事先准备好的数据集&#xff0c;这是做数据分析的第一步。Panda 提…...

微服务的异步通信技术RabbitMQ

文章目录前言1.WorkQueue&#xff08;工作队列&#xff09;消息预取机制2.Publish&Subscribe&#xff08;发布-订阅&#xff09;1.Fanout&#xff08;广播&#xff09;2.DirectExchange&#xff08;路由&#xff09;3.TopicExchange&#xff08;话题&#xff09;MQ的优点前…...

Word处理控件Aspose.Words功能演示:使用 C++ 在 Word (DOC/DOCX) 中添加或删除水印

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…...

chatGPT模型原理

文章目录简介BertGPT 初代GPT-2GPT-3chatGPT开源ChatGPT简介 openai 的 GPT 大模型的发展历程。 Bert 2018年&#xff0c;自然语言处理 NLP 领域也步入了 LLM 时代&#xff0c;谷歌出品的 Bert 模型横空出世&#xff0c;碾压了以往的所有模型&#xff0c;直接在各种NLP的建模…...

四、阻塞队列

文章目录基础概念生产者消费者概念JUC阻塞队列的存取方法ArrayBlockingQueueArrayBlockingQueue的基本使用生产者方法实现原理ArrayBlockingQueue的常见属性add方法实现offer方法实现offer(time,unit)方法put方法消费者方法实现原理remove方法poll方法poll(time,unit)方法take方…...

企业电子招投标采购系统源码之登录页面

​ 信息数智化招采系统 服务框架&#xff1a;Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构&#xff1a;VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术&#xff1a;Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…...

SQL零基础入门学习(十三)

上一篇&#xff08;SQL零基础入门学习&#xff08;十二&#xff09;&#xff09; SQL 视图&#xff08;Views&#xff09; 视图是可视化的表。 SQL CREATE VIEW 语句 在 SQL 中&#xff0c;视图是基于 SQL 语句的结果集的可视化的表。 视图包含行和列&#xff0c;就像一个…...

Java实现简单KV数据库

用Java实现一个简单的KV数据库 开发思路&#xff1a; 用map存储数据&#xff0c;再用一个List记录操作日志&#xff0c;开一个新线程将List中的操作写入日志文件中&#xff0c;再开一个线程用于网络IO服务接收客户端的命令&#xff0c;再启动时检查日志&#xff0c;如果有数据就…...

【Spark分布式内存计算框架——Spark Streaming】5. DStream(上)

3. DStream SparkStreaming模块将流式数据封装的数据结构&#xff1a;DStream&#xff08;Discretized Stream&#xff0c;离散化数据流&#xff0c;连续不断的数据流&#xff09;&#xff0c;代表持续性的数据流和经过各种Spark算子操作后的结果数据流。 3.1 DStream 是什么…...

Spring系列-9 Async注解使用与原理

背景&#xff1a; 本文作为Spring系列的第九篇&#xff0c;介绍Async注解的使用、注意事项和实现原理&#xff0c;原理部分会结合Spring框架代码进行。 本文可以和Spring系列-8 AOP原理进行比较阅读 1.使用方式 Async一般注解在方法上&#xff0c;用于实现方法的异步&#xf…...

Python自动化测试实战篇(6)用PO分层模式及思想,优化unittest+ddt+yaml+request登录接口自动化测试

这些是之前的文章&#xff0c;里面有一些基础的知识点在前面由于前面已经有写过&#xff0c;所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇&#xff08;1&#xff09;读取xlsx中账户密码&#xff0c;unittest框架实现通过requests接口post登录网站请求&…...

Linux 进程:父子进程

目录一、了解子进程二、创建子进程1.创建子进程2.区分父子进程三、理解子进程四、创建子进程的意义进程就是运行中的应用程序&#xff0c;如果一个程序较为庞大&#xff0c;我们可以给这个程序创建多个进程&#xff0c;每个进程负责一部分代码的运行。 A进程如果创建了B进程&am…...

Unity 之 实现读取代码写进Word文档功能实现 -- 软著脚本生成工具

Unity 之 实现读取代码写进Word文档功能前言一&#xff0c;实现步骤1.1 逻辑梳理1.2 用到工具二&#xff0c;实现读写文件2.1 读取目录相关2.2 读写文件三&#xff0c;编辑器拓展3.1 编辑器拓展介绍3.2 实现界面可视化四&#xff0c;源码分享4.1 工具目录4.2 完整代码前言 之所…...

Typora图床配置:Typora + PicGo + 阿里云OSS

文章目录一、前景提要二、相关链接三、搭建步骤1. 购买阿里云对象存储OSS2. 对象存储OSS&#xff1a;创建Bucket3. 阿里云&#xff1a;添加OSS访问用户及权限4. 安装Typora5. 配置PicGo方法一&#xff1a;使用PicGo-Core (Command line)方法二&#xff1a;使用PicGo(app)6. 最后…...

二进制搭建以太坊2.0节点-2023最新详细版文档

文章目录 一、配置 JWT 认证二、部署执行节点geth2.1 下载geth二进制文件2.2 geth节点启动三、部署共识节点Prysm3.1 下载Prysm脚本3.2 Prysm容器生成四、检查节点是否同步完成4.1 检查geth执行节点4.2 检查prysm共识节点4.3 geth常用命令五、节点同步详细说明5.1 启动时日志5.…...

如何简化跨网络安全域的文件发送流程,大幅降低IT人员工作量?

为什么要做安全域的隔离&#xff1f; 随着企业数字化转型的逐步深入&#xff0c;企业投入了大量资源进行信息系统建设&#xff0c;信息化程度日益提升。在这一过程中&#xff0c;企业也越来越重视核心数据资产的保护&#xff0c;数据资产的安全防护成为企业面临的重大挑战。 …...

带你深入了解c语言指针后续

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:介绍c语言中有关指针更深层的知识. 金句分享: ✨在该…...

借助Intune无感知开启Bitlocker

希望使用 Intune 部署 BitLocker&#xff0c;但不知道从哪里开始&#xff1f;这是人们最开始使用 Intune 时最常见的问题之一。在本博客中&#xff0c;你将了解有关使用 Intune 管理 BitLocker 的所有信息&#xff0c;包括建议的设置、BitLocker CSP 在客户端上的工作方式&…...

零基础该如何转行Python工程师?学习路线是什么?

最近1年的主要学习时间&#xff0c;都投资到了 python 数据分析和数据挖掘上面来了&#xff0c;虽然经验并不是十分丰富&#xff0c;但希望也能把自己的经验分享下&#xff0c;最近也好多朋友给我留言&#xff0c;和我聊天&#xff0c;问我python该如何学习&#xff0c;才能少走…...

Go项目(商品微服务-1)

文章目录简介建表protohandler商品小结简介 商品微服务主要在于表的设计&#xff0c;建哪些表&#xff1f;表之间的关系是怎样的&#xff1f; 主要代码就是 CURD表和字段的设计是一个比较有挑战性的工作&#xff0c;比较难说清楚&#xff0c;也需要经验的积累&#xff0c;这里…...

机器学习——集成学习

引言 集成学习&#xff1a;让机器学习效果更好&#xff0c;单个不行&#xff0c;群殴走起。 分类 1. Bagging:训练多个分类器取平均&#xff08;m代表树的个数&#xff09;。 2.Boosting&#xff08;提升算法&#xff09;:从弱学习器开始加&#xff0c;通过加权来进行训练。…...

VS编译系统 实用调试技巧

目录什么是bug?调试是什么&#xff1f;有多重要&#xff1f;debug和release的介绍windows环境调试介绍、一些调试实例如何写出&#xff08;易于调试&#xff09;的代码编程常见的错误什么是bug?其实bug在英文翻译中有表示臭虫的含义&#xff0c;因为第一次被发现的导致计算机…...

【华为OD机试模拟题】用 C++ 实现 - GPU 调度(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明GPU 调度题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。...

腾讯前端必会react面试题合集

React-Router的路由有几种模式&#xff1f; React-Router 支持使用 hash&#xff08;对应 HashRouter&#xff09;和 browser&#xff08;对应 BrowserRouter&#xff09; 两种路由规则&#xff0c; react-router-dom 提供了 BrowserRouter 和 HashRouter 两个组件来实现应用的…...

Linux搭建SVN服务器,并内网穿透实现公网远程访问

文章目录1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6.2 配置…...

C++STL之list的模拟实现

目录 一.list准备 二. iterator迭代器 1._list_iterator 2.begin()、end() 3.const_begin()、const_end() 4.!&& 5. && -- 6.operator* 7.operator-> 三.Modify(修改) 1.insert() 2.erase() 3.push_back() && push_front() 4.pop_bac…...

为什么硬件性能监控很重要

当今的混合网络环境平衡了分布式网络和现代技术的实施。但它们并不缺少一个核心组件&#xff1a;服务器。保持网络正常运行时间归结为监控和管理导致网络停机的因素。极有可能导致性能异常的此类因素之一是硬件。使用硬件监控器监控网络硬件已成为一项关键需求。 硬件监视器是…...

HTTP缓存

HTTP缓存HTTP缓存引发的一个问题HTTP缓存的作用HTTP缓存的分类强制缓存协商缓存&#xff08;解决强缓存下资源不更新问题&#xff09;缓存策略HTTP缓存引发的一个问题 有一次在开发移动端H5项目&#xff0c;UI提了几个UI问题&#xff0c;经过样式调试&#xff0c;android上没有…...

SPI设备树处理过程

SPI设备树处理过程 文章目录SPI设备树处理过程参考资料&#xff1a;一、 spi_device结构体二、 SPI设备树格式2.1 SPI Master2.2 SPI Device2.3 设备树示例三、设备树实例3.1 使用GPIO模拟的SPI控制器3.2 IMX6ULL SPI控制器四、 设备树处理过程致谢参考资料&#xff1a; 内核头…...

数据有哪些重要的作用?

我们正处在科技高速发展的时代&#xff0c;如今互联网已经与我们的生活息息相关&#xff0c;我们每天在互联网产生大量的数据&#xff0c;这些数据散落在网络中看似没有怎么作用&#xff0c;但是这些数据经过系统的处理整合起来确实非常有价值的。 一、 发展大数据技术可以提高…...

wordpress oa 插件/站长之家查询

feign.Logger.Level 修改日志级别&#xff0c;包含4个不同级别&#xff0c;NONE&#xff0c;BASE&#xff0c;HEADERS&#xff0c;FULL 1. 基于配置文件yml feign:client:config:default: #这里default就是全局配置&#xff0c;如果是写服务名称&#xff0c;则是针对某个微服…...

自己做网站stri/域名备案

procomm plus 的基本使用方法 1 串口脚本有些串口工具&#xff08;例如串口调试助手&#xff09;有定时发送功能&#xff0c;但只能发送一条固定的命令。我需要发送几百条命令&#xff0c;又懒得写程序&#xff0c;就希望找一个可以执行串口脚本的工具。然后我找到了procomm pl…...

一个公司主体可以在多个网站做备案/竞价托管哪家便宜

1.content-type 是指 数据在 http网络通信的时候&#xff0c;字符串的类型 2.请求有 发送数据的 content-type,有 可以接收的content-type 3.而 编码格式&#xff0c;只是 这个字符串里面的 字符的 编码格式&#xff0c;content-type是这个字符串的 类型 4.而有些特定的 需求 例…...

软件下载类型网站怎么做/武汉seo结算

后退文件夹: cd - 在重复一遍就是前进了 转载于:https://www.cnblogs.com/Baronboy/p/7787760.html...

海西州住房建设局网站/关键字排名优化公司

https://yundun.console.aliyun.com/?spm5176.200001.0.0.CZkdXg&pcas#/cas/download/2***4?regionId 点击“下载证书“按钮 安装证书 文件说明&#xff1a; 1. 证书文件2***4.pem&#xff0c;包含两段内容&#xff0c;请不要删除任何一段内容。 2. 如果是证书系统创建的…...

网站开发公司基础产品/网络推广怎么找客户资源

&#xfeff;&#xfeff;&#xfeff;&#xfeff;&#xfeff;&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评 /************************************************************************/ /* 81. SHELL排序程序。 该方法的特征是&#xff1a;一个元素与它间隔…...