Pandas库的学习

pandas是数据处理最常用的分析库之一,可以读取各种各样格式的数据文件,一般输出dataframe格式。
如:txt、csv、excel、json、剪切板、数据库、html、hdf、parquet、pickled文件、sas、stata等等。

对于结构化的、探索性数据统计和分析场景,使用pandas方法进行读取,因为其提供了数据框,对数据进行任意翻转、切片、关联都很方便。

1.read_csv方法

read_csv方法用来读取csv格式文件,输出dataframe格式。

filepath_or_buffer读取csv文件,可以是文件路径,也可以是一个URL,如果访问该URL会返回一个文件的话,那么pandas的read_csv函数会自动将该文件进行读取。

import pandas as pd
file_path=r'D:\pythonProject\数学建模\data\1\附件1 弱覆盖栅格数据(筛选).csv'#'test.csv'

可以设置set_option展现完整数据,不设置的话就会省略。。。
pd.set_option("display.width",None)
pd.set_option("display.max_rows",None)

content=pd.read_csv(file_path)
print(content)

header设置导入 DataFrame 的列名称,默认为 “infer”

names:当names没被赋值时,header会变成0,即选取数据文件的第一行作为列名。

当 names 被赋值,header 没被赋值时,那么header会变成None。如果都赋值,就会实现两个参数的组合功能。

content=pd.read_csv(file_path, header=1)#从第2行开始
content=pd.read_csv(file_path, header=None)
#认为原始文件数据没有列索引,为其自动加上列索引{从0开始}
content=pd.read_csv(file_path, names=["1", "2", "3"])#在原csv上面加上names数据这1行
content=pd.read_csv(file_path, names=range(1,4), header=0)
#从第1行开始,并把第1行替换成names数组

usecols选择想要提取的列,选择列名的长度大于 4 的列:usecols=lambda x: len(x) > 4

content=pd.read_csv(file_path, usecols=["x", "y"])
content=pd.read_csv(file_path, index_col=2)#将第一列作为索引index

index_col=’y’,将”y”这一列作为索引即行索引后,”y”这列即不在属于列名这类,即不能使用df[‘y’]获取列值
read_csv()方法中header参数和index_col参数不能混用,因为header指定列索引,index_col指定行索引,一个DataFrame对象只有一种索引

dtype来指定某个列的类型

content=pd.read_csv(file_path, dtype={"x": str,'y':str})#dtype来指定某个列的类型
content["x"] = content["x"] * 3
#converters可以在读取的时候对列数据进行变换,好像也可以指定数据类型
#使用converters参数时,解析器默认所有列的类型为 str,所以需要显式类型转换
content=pd.read_csv(file_path, converters={"id": lambda x: int(x) + 10})
true_values和false_value指定哪些值应该被清洗为True,哪些值被清洗为False
只有当某一列的数据全部出现在true_values + false_values里面,才会被替换
content=pd.read_csv(file_path, true_values=["对"], false_values=["错"])
content=pd.read_csv(file_path, false_values=["错", "对"])
skiprows 表示过滤行,想过滤掉哪些行,先过滤,然后再确定表头
content=pd.read_csv(file_path,skiprows=[0])
content=pd.read_csv(file_path, skiprows=lambda x: x > 0 and x % 2 == 0)
skipfooter:接收整型,表示从结尾往上过滤掉指定数量的行,解析引擎退化为 Python。这是因为 C 解析引擎没有这个特性。
content=pd.read_csv(file_path, skipfooter=3, encoding="utf-8", engine="python")
#nrows 设置一次性读入的文件行数
它在读入大文件时很有用,比如 16G 内存的PC无法容纳几百 G 的大文件。很多时候我们只是想看看大文件内部的字段长什么样子
content=pd.read_csv(file_path, nrows=1)
na_values 参数可以配置哪些值需要处理成 NaN,针对整个csv中的全部数据,下面是只对指定的列进行替换
content=pd.read_csv(file_path, na_values=["对", "古明地觉"])
content=pd.read_csv(file_path, sep="\t", na_values={"x": ["古明地觉", "博丽灵梦"], "y": ["对"]})
除了 na_values 指定的值之外,还有一些默认的值也会在读取的时候被替换成空值,这些值有:
"-1.#IND"、"1.#QNAN"、"1.#IND"、"-1.#QNAN"、"#N/A N/A"、"#N/A"、"N/A"、"NA"、"#NA"、"NULL"、"NaN"、"-NaN"、"nan"、"-nan"、""
尽管这些值在 CSV 中的表现形式是字符串,但是 pandas 在读取的时候会替换成空值(真正意义上的 NaN)。
不过有些时候我们不希望这么做,比如有一个具有业务含义的字符串恰好就叫 "NA",那么再将它替换成空值就不对了。
这个时候就可以将 keep_default_na 指定为 False,默认为 True,如果指定为 False,那么 pandas 在读取时就不会擅自将那些默认的值转成空值了
但是na_values 参数指定的不受此影响,还是会转换成NAN
content=pd.read_csv(file_path, na_values=["", "NULL"],keep_default_na=False)
na_filter指定为 False,那么 pandas 在读取 CSV 的时候不会进行任何空值的判断和检测,所有的值都会保留原样。
因此,如果你能确保一个 CSV 肯定没有空值,则不妨指定 na_filter 为 False,因为避免了空值检测,可以提高大型文件的读取速度。
另外,该参数会屏蔽 keep_default_na 和 na_values,也就是说,当 na_filter 为 False 的时候,这两个参数会失效。

skip_blank_lines 默认为 True,表示过滤掉空行,如为 False 则解析为 NaN。
也可以指定 keep_default_na 为 False 来改变这一点
content=pd.read_csv(file_path, na_filter=False,skip_blank_lines=False)
parse_dates,指定某些列为时间类型,这个参数一般搭配下面的date_parser使用。
date_parser是用来配合parse_dates参数的,因为有的列虽然是日期,但没办法直接转化,需要我们指定一个解析格式:
infer_datetime_format 参数默认为 False。如果设定为 True 并且 parse_dates 可用,
那么 pandas 将尝试转换为日期类型,如果可以转换,转换方法并解析,在某些情况下会快 5~10 倍。
from datetime import datetime
content=pd.read_csv(file_path, sep="\t", parse_dates=["date"], date_parser=lambda x: datetime.strptime(x, "%Y年%m月%d日"))
keep_date_col : boolean, default False
如果连接多列解析日期,则保持参与连接的列。默认为False。
#
date_parser : function, default None
用于解析日期的函数,默认使用dateutil.parser.parser来做转换。Pandas尝试使用三种不同的方式解析,如果遇到问题则使用下一种方式。
1.使用一个或者多个arrays(由parse_dates指定)作为参数;
2.连接指定多列字符串作为一个列作为参数;
3.每行调用一次date_parser函数来解析一个或者多个字符串(由parse_dates指定)作为参数。

dayfirst : boolean, default False
DD/MM格式的日期类型
分块读入内存,尤其单机处理大文件时会很有用。
iterator 为 bool类型,默认为False。如果为True,那么返回一个 TextFileReader 对象,以便逐块处理文件。
这个在文件很大、内存无法容纳所有数据文件时,可以分批读入,依次处理。
chunk = pd.read_csv(file_path, iterator=True)
print(chunk)  # <pandas.io.parsers.textfilereader object at 0x000002550189c0a0>

print(chunk.get_chunk(1))#&#x4F9D;&#x6B21;&#x4ECE;&#x5269;&#x4F59;&#x7684;&#x6570;&#x636E;&#x4E2D;&#x8BFB;&#x53D6;&#x524D;1&#x884C;
print(chunk.get_chunk(2))#&#x4F9D;&#x6B21;&#x4ECE;&#x5269;&#x4F59;&#x7684;&#x6570;&#x636E;&#x4E2D;&#x8BFB;&#x53D6;&#x524D;2&#x884C;
&#x6587;&#x4EF6;&#x8FD8;&#x5269;&#x4E0B;&#x4E09;&#x884C;&#xFF0C;&#x4F46;&#x662F;&#x6211;&#x4EEC;&#x6307;&#x5B9A;&#x8BFB;&#x53D6;100&#xFF0C;&#x90A3;&#x4E48;&#x4E5F;&#x4E0D;&#x4F1A;&#x62A5;&#x9519;&#xFF0C;&#x4E0D;&#x591F;&#x6307;&#x5B9A;&#x7684;&#x884C;&#x6570;&#xFF0C;&#x90A3;&#x4E48;&#x6709;&#x591A;&#x5C11;&#x8FD4;&#x56DE;&#x591A;&#x5C11;
print(chunk.get_chunk(100))
try:
    # &#x4F46;&#x662F;&#x5728;&#x8BFB;&#x53D6;&#x5B8C;&#x6BD5;&#x4E4B;&#x540E;&#xFF0C;&#x518D;&#x8BFB;&#x7684;&#x8BDD;&#x5C31;&#x4F1A;&#x62A5;&#x9519;&#x4E86;
    chunk.get_chunk(5)
except StopIteration as e:
    print("&#x8BFB;&#x53D6;&#x5B8C;&#x6BD5;")
&#x8BFB;&#x53D6;&#x5B8C;&#x6BD5;</pandas.io.parsers.textfilereader>
chunksize 整型,默认为 None,设置读取文件块的大小。
chunk = pd.read_csv(file_path, chunksize=2)
&#x8FD8;&#x662F;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x7C7B;&#x4F3C;&#x4E8E;&#x8FED;&#x4EE3;&#x5668;&#x7684;&#x5BF9;&#x8C61;
print(chunk)  # <pandas.io.parsers.textfilereader object at 0x0000025501143af0>
&#x8C03;&#x7528;get_chunk&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x6307;&#x5B9A;&#x884C;&#x6570;&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x662F;&#x9ED8;&#x8BA4;&#x7684;chunksize
print(chunk.get_chunk())
&#x4F46;&#x4E5F;&#x53EF;&#x4EE5;&#x6307;&#x5B9A;
print(chunk.get_chunk(100))
try:
    chunk.get_chunk(5)
except StopIteration as e:
    print("&#x8BFB;&#x53D6;&#x5B8C;&#x6BD5;")
&#x8BFB;&#x53D6;&#x5B8C;&#x6BD5;</pandas.io.parsers.textfilereader>
compression 参数取值为 {'infer', 'gzip', 'bz2', 'zip', 'xz', None},默认 'infer',这个参数直接支持我们使用磁盘上的压缩文件。
&#x76F4;&#x63A5;&#x5C06;&#x4E0A;&#x9762;&#x7684;girl.csv&#x6DFB;&#x52A0;&#x5230;&#x538B;&#x7F29;&#x6587;&#x4EF6;&#xFF0C;&#x6253;&#x5305;&#x6210;girl.zip
content=pd.read_csv('girl.zip', sep="\t", compression="zip")
error_bad_lines和warn_bad_lines 两参数只能在C解析引擎下使用。
如果一行包含过多的列,假设csv的数据有5列,但是某一行却有6个数据,数据有问题。那么默认情况下不会返回DataFrame,而是会报错。
这时,我们就可以将error_bad_lines设置为False(默认为True),遇到这种情况,直接把这一行扔掉。同时会设置 warn_bad_lines 设置为True,打印剔除的这行。
content=pd.read_csv(file_path, error_bad_lines=False, warn_bad_lines=True)
sep读取csv文件时指定的分隔符,默认为逗号
sep : str , default','分隔符长于一个字符并且不是'\s+',将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子:'\r\t'
**这里补充说明一下'\s+'
正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]
    \f -> 匹配一个换页
    \n -> 匹配一个换行符
    \r -> 匹配一个回车符
    \t -> 匹配一个制表符
    \v -> 匹配一个垂直制表符
    而"\s+"则表示匹配任意多个上面的字符。

delimiter定界符,备选分隔符,与 sep 功能相似(如果指定该参数,则sep参数失效)

delim_whitespace设置为 True 时,表示分割符为空白字符,可以是空格、"\t"等等,等效于设定sep='\s+'。不管分隔符是什么,只要是空白字符,那么可以通过delim_whitespace=True进行读取。如果这个参数设定为Ture那么delimiter 参数失效。

实际生产用的数据会很复杂,有时导入的数据会含有重名的列。参数 mangle_dupe_cols 默认为 True,重名的列导入后面多一个 .1。如果设置为 False,会抛出不支持的异常

prefix 参数,当导入的数据没有 header 时,设置此参数会自动加一个前缀。比如:
content=pd.read_csv(file_path, header=None, prefix="x")
#生成的列的名称是x0,x1,x2...不指定prefix就是0,1,2...

squeeze参数为True的话,在只有一列的情况下,那么得到就是一个Series
engine指定pandas解析数据时用的引擎,pandas 目前的解析引擎提供两种:c、python,默认为 c,因为 c 引擎解析速度更快,但是特性没有 python 引擎全。如果使用 c 引擎没有的特性时,会自动退化为 python 引擎。
low_memory这个看起来是和内存有关的,但更准确的说,其实它是和数据类型相关的。在解释这个原因之前,我们还要先从DataFrame的数据类型说起。
我们知道DataFrame的每一列都是有类型的,那么在读取csv的时候,pandas也是要根据数据来判断每一列的类型的。但pandas主要是靠"猜"的方法,因为在读取csv的时候是分块读取的,每读取一块的时候,会根据数据来判断每一列是什么类型;然后再读取下一块,会再对类型进行一个判断,得到每一列的类型,如果得到的结果和上一个块得到结果不一样,那么就会发出警告,提示有以下的列存在多种数据类型:
DtypeWarning: Columns (1,5,8,......) have mixed types. Specify dtype option on import or set low_memory=False.

而为了保证正常读取,那么会把类型像大的方向兼容,比如第一个块的user_id被解析成整型,但是在解析第二个块发现user_id有的值无法解析成整型,那么类型整体就会变成字符串,于是pandas提示该列存在混合类型。
而一旦设置low_memory=False,那么pandas在读取csv的时候就不分块读了,而是直接将文件全部读取到内存里面,这样只需要对整体进行一次判断,就能得到每一列的类型。但是这种方式也有缺陷,一旦csv过大,就会内存溢出。
不过从数据库读取就不用担心了,因为数据库是规定了每一列的类型的。如果是从数据库读取得到的DataFrame,那么每一列的数据类型和数据库表中的类型是一致的。还有,我们在上面介绍了dtype,这个是我们手动规定类型,那么pandas就会按照我们规定的类型去解析指定的列,但是一旦无法解析就会报错。
memory_map如果你知道python的一个模块mmap,那么你肯定很好理解。如果使用的数据在内存里,那么直接进行映射即可,直接map文件使用,不会(可以避免文件)再次进行IO操作,默认为False。这个参数比较底层,我们一般用不到。
verbose=True:打印一些额外信息
thousands 千分位分割符,如 , 或者 .,默认为None。
encoding 指定字符集类型,通常指定为 'utf-8'。根据情况也可能是'ISO-8859-1'
skipinitialspace=True忽略分隔符后的空白(默认为False,即不忽略).

print(content)
print(content.head())  # &#x9ED8;&#x8BA4;&#x8FD4;&#x56DE;&#x524D;5&#x884C;&#x6570;&#x636E;
print(content.head(3))  # &#x8FD4;&#x56DE;&#x524D;3&#x884C;&#x6570;&#x636E;
print(content.shape)  # &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5143;&#x7EC4;&#xFF08;&#x603B;&#x884C;&#x6570;&#xFF0C;&#x603B;&#x5217;&#x6570;&#xFF09;&#xFF0C;&#x603B;&#x884C;&#x6570;&#x4E0D;&#x5305;&#x62EC;&#x6807;&#x9898;&#x884C;
print(content.index)    # RangeIndex(start=0, stop=182807, step=1)
&#x8FD4;&#x56DE;&#x7D22;&#x5F15;&#xFF0C;&#x662F;&#x4E00;&#x4E2A;&#x53EF;&#x8FED;&#x4EE3;&#x7684;&#x5BF9;&#x8C61;<class 'pandas.core.indexes.range.rangeindex'>
print(content.columns)    #  &#x8FD4;&#x56DE;&#x6240;&#x6709;&#x7684;&#x5217;&#x540D; Index(['x', 'y', 'traffic'], dtype='object')
print(content.dtypes)  #  &#x8FD4;&#x56DE;&#x7684;&#x662F;&#x6BCF;&#x5217;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;</class>

2.read_excel方法

read_excel 读取excel文件,包括xlsx、xls、xlsm格式,需要下载openpyxl库

read_excel大多数的方法和read_csv相同,不同的或者特别的我用红色字体标出了。

#io为文件类对象,一般作为读取文件的路径,默认读取第一个表
import pandas as pd
file_path=r'D:\pythonProject\&#x6570;&#x5B66;&#x5EFA;&#x6A21;\data\a.xlsx'

&#x53EF;&#x4EE5;&#x8BBE;&#x7F6E;set_option&#x5C55;&#x73B0;&#x5B8C;&#x6574;&#x6570;&#x636E;&#xFF0C;&#x4E0D;&#x8BBE;&#x7F6E;&#x7684;&#x8BDD;&#x5C31;&#x4F1A;&#x7701;&#x7565;&#x3002;&#x3002;&#x3002;
pd.set_option("display.width",None)
pd.set_option("display.max_rows",None)

&#x4E3A;&#x65B9;&#x4FBF;&#x6F14;&#x793A;&#x51FD;&#x6570;&#x6548;&#x679C;&#x8FD9;&#x91CC;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;excel&#x6587;&#x4EF6;&#xFF0C;&#x5176;&#x4E2D;&#x521B;&#x5EFA;&#x4E86;&#x4E24;&#x4E2A;&#x8868;&#x683C;&#xFF1A;
excel=pd.read_excel(file_path, header=None)

该参数为指定读取excel的表格名。

#sheet_name默认为0,=1指定读取第2张表
excel=pd.read_excel(file_path,header=1)
#header&#x53C2;&#x6570;&#x4E3A;&#x6307;&#x5B9A;&#x5217;&#x8868;&#x4E2D;&#x4ECE;&#x7B2C;2&#x884C;&#x4F5C;&#x4E3A;&#x5217;&#x7D22;&#x5F15;
excel=pd.read_excel(file_path,names=['x','y','z'])
#names:&#x63A5;&#x6536;&#x4E00;&#x4E2A;&#x6570;&#x7EC4;&#xFF0C;&#x5C06;&#x5217;&#x540D;(&#x7B2C;&#x4E00;&#x884C;)&#x91CD;&#x5B9A;&#x4E49;&#x8D4B;&#x503C;
excel=pd.read_excel(file_path,usecols=['222q'])
#usecols&#x9009;&#x62E9;&#x60F3;&#x8981;&#x63D0;&#x53D6;&#x7684;&#x5217;&#xFF0C;&#x9009;&#x62E9;&#x5217;&#x540D;&#x7684;&#x957F;&#x5EA6;&#x5927;&#x4E8E; 4 &#x7684;&#x5217;&#xFF1A;usecols=lambda x: len(x) > 4
excel=pd.read_excel(file_path,usecols="A,C")
#excel&#x4E2D;&#x4E0A;&#x9762;&#x6709;A&#xFF0C;B,C&#xFF0C;usecols="A,C:E"&#x8868;&#x793A;&#x7B2C;A&#x5217;&#x548C;C&#x5230;E&#x5217;
excel=pd.read_excel(file_path,usecols=[0,2])
#&#x9009;&#x7B2C;1&#x5217;&#x548C;&#x7B2C;3&#x5217;
excel=pd.read_excel(file_path,index_col=1)
#index_col&#xFF1A;&#x6307;&#x5B9A;&#x5C06;&#x7B2C;&#x51E0;&#x5217;&#x4F5C;&#x4E3A;&#x7D22;&#x5F15;
excel=pd.read_excel(file_path,dtype={'333q':np.float64})
#&#x6307;&#x5B9A;&#x8BFB;&#x53D6;&#x5217;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;,&#x53EF;&#x63A5;&#x6536;&#x5B57;&#x5178;,&#x82E5;&#x6307;&#x5B9A;&#x4E86;&#x201C;converters&#x201D;&#x53C2;&#x6570;&#xFF0C;&#x5219;dtype&#x51FD;&#x6570;&#x5931;&#x6548;&#x3002;
excel=pd.read_excel(file_path,dtype={"222q":np.float64},converters={"ID":str,"vaule":lambda x: x+1})
#converters&#x6307;&#x5B9A;&#x5217;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x51FD;&#x6570;&#xFF0C;&#x5305;&#x62EC;&#x4E86;dtype&#x7684;&#x529F;&#x80FD;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x5BF9;&#x67D0;&#x4E00;&#x5217;&#x4F7F;&#x7528;Lambda&#x51FD;&#x6570;&#xFF0C;&#x8FDB;&#x884C;&#x67D0;&#x79CD;&#x8FD0;&#x7B97;
excel=pd.read_excel(file_path,sheet_name=1,true_values=['female'],false_values=['male'])
#&#x4F20;&#x8F93;&#x4E00;&#x4E2A;&#x5217;&#x8868;&#x5224;&#x65AD;&#x4E3A;true&#x6216;&#x662F;false
#skiprows参数为跳过行操作,仅取偶数行:skiprows=lambda x:x%2==0
excel=pd.read_excel(file_path,skiprows=[1,3])
excel=pd.read_excel(file_path,skipfooter=2)
#&#x4ECE;&#x7ED3;&#x5C3E;&#x5F80;&#x4E0A;&#x8FC7;&#x6EE4;&#x6389;&#x6307;&#x5B9A;&#x6570;&#x91CF;&#x7684;&#x884C;
#nrow指定需要读取前多少行,通常用于较大的数据文件中
excel=pd.read_excel(file_path,nrows=3)
#na_values将指定的值或者传入中的列表中的值设置为NaN
含义:用于将某些特定的值,解析为NaN值,然后便于我们后面做缺失值的处理;
na_values="值1"表示将所有数据中值1全部替换为NaN;
na_values=["值1","值2"]表示将所有数据中值1、值2全部替换为NaN;
na_values={"列1":["值1","值2"]}表示将第一列中所有的值1、值2全部替换为NaN;
excel=pd.read_excel(file_path,sheet_name=1,na_values=["", "NULL"],keep_default_na=False)
#&#x8868;&#x793A;&#x5C06;&#x6240;&#x6709;&#x6570;&#x636E;&#x4E2D;&#x503C;1&#x3001;&#x503C;2&#x5168;&#x90E8;&#x66FF;&#x6362;&#x4E3A;NaN&#xFF1B;
excel = pd.read_excel(file_path, na_values={"&#x5217;2": ["0", " "]})
#&#x53EA;&#x66FF;&#x6362;&#x67D0;&#x4E00;&#x5217;&#x4E2D;&#x7684;&#x67D0;&#x4E9B;&#x503C;&#x4E3A;NaN
#keep_default_na处理数据是否包含默认的NaN值依赖于na_values参数是否被传递,默认为True,即自动识别空值导入。
na_filter指定为 False,那么 pandas 在读取 CSV 的时候不会进行任何空值的判断和检测,所有的值都会保留原样。
作用:检测缺少的值标记。当数据中没有任何NA值时,na_filter设置为False可以提高处理速度,特别是处理大文件时。
另外,该参数会屏蔽 keep_default_na 和 na_values,也就是说,当 na_filter 为 False 的时候,这两个参数会失效。
excel=pd.read_excel(file_path, na_filter=False)
parse_dates# 含义:指定将哪些列,解析为日期格式;
parse_dates=True是专门用于将行索引,解析为日期格式;
parse_dates=[0,1,2,3,4]和parse_dates=["列名1","列名2","列名3","列名4"],都是将指定列一起解析为日期格式;
parse_dates=[[1,2,3]]和parse_dates=[["年","月","日"]],都是将多个列,解析为单个日期列(列名是组合的列名);
parse_dates={"日期":[1,2,3]}不仅将多个日期列解析为单个日期列,同时还为这一列命名;

#重新创建个表:
  年   月   日
2022  4   27
2022  4   27
excel = pd.read_excel(file_path, parse_dates=[0, 1, 2, 3])
excel = pd.read_excel(file_path, parse_dates=[["&#x5E74;","&#x6708;","&#x65E5;"]])
excel = pd.read_excel(file_path, parse_dates={"&#x65E5;&#x671F;":[0,1,2]})
data_parser
作用:设置处理日期数据的函数,利用lambda函数,将某个字符串列,解析为日期格式;一般是配合parse_dates参数,一起使用
excel=pd.read_excel(file_path,parse_dates=[0],date_parser=lambda x:pd.to_datetime(x,format='%Y&#x5E74;%m&#x6708;%d&#x65E5;'))
参数 mangle_dupe_cols 默认为 True,重名的列导入后面多一个 .1。如果设置为 False,会抛出不支持的异常:
excel=pd.read_excel(file_path,mangle_dupe_cols=False)
engine参数为指定Excel处理引擎,一般Excel处理引擎为xlrd,openpyxl,odf:
excel=pd.read_excel(file_path,engine='openpyxl')
.verbose输出放置在非数字列中NA值的数目
excel=pd.read_excel(file_path, verbose=True)

squeeze:布尔值,默认为False。如果只有一列数值,则返回一个Series。

print(content)
print(content.head())  # &#x9ED8;&#x8BA4;&#x8FD4;&#x56DE;&#x524D;5&#x884C;&#x6570;&#x636E;
print(content.head(3))  # &#x8FD4;&#x56DE;&#x524D;3&#x884C;&#x6570;&#x636E;
print(content.shape)  # &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5143;&#x7EC4;&#xFF08;&#x603B;&#x884C;&#x6570;&#xFF0C;&#x603B;&#x5217;&#x6570;&#xFF09;&#xFF0C;&#x603B;&#x884C;&#x6570;&#x4E0D;&#x5305;&#x62EC;&#x6807;&#x9898;&#x884C;
print(content.index)    # RangeIndex(start=0, stop=182807, step=1)
&#x8FD4;&#x56DE;&#x7D22;&#x5F15;&#xFF0C;&#x662F;&#x4E00;&#x4E2A;&#x53EF;&#x8FED;&#x4EE3;&#x7684;&#x5BF9;&#x8C61;<class 'pandas.core.indexes.range.rangeindex'>
print(content.columns)    #  &#x8FD4;&#x56DE;&#x6240;&#x6709;&#x7684;&#x5217;&#x540D; Index(['x', 'y', 'traffic'], dtype='object')
print(content.dtypes)  #  &#x8FD4;&#x56DE;&#x7684;&#x662F;&#x6BCF;&#x5217;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;</class>
python用于读写excel文件的库有很多,除了前面提到的pandas,还有xlrd、xlwt、openpyxl、xlwings等等。
主要模块:
xlrd库:从excel中读取数据,支持xls、xlsx
xlwt库:对excel进行修改操作,不支持对xlsx格式的修改
xlutils库:在xlw和xlrd中,对一个已存在的文件进行修改
openpyxl:主要针对xlsx格式的excel进行读取和编辑
xlwings:对xlsx、xls、xlsm格式文件进行读写、格式修改等操作
xlsxwriter:用来生成excel表格,插入数据、插入图标等表格操作,不支持读取
Microsoft Excel API:需安装pywin32,直接与Excel进程通信,可以做任何在Excel里可以做的事情,但比较慢

3.read_sql(sql语句,数据库连接对象)

操作数据库(pymysql、cx_Oracle等)
python几乎支持对所有数据库的交互,连接数据库后,可以使用sql语句进行增删改查。
主要模块:
pymysql:用于和mysql数据库的交互
sqlalchemy:用于和mysql数据库的交互
cx_Oracle:用于和oracle数据库的交互
sqlite3:内置库,用于和sqlite数据库的交互
pymssql:用于和sql server数据库的交互
pymongo:用于和mongodb非关系型数据库的交互
redis、pyredis:用于和redis非关系型数据库的交互

数据库表格读取、数据对象的创建,可以根据pymysql,cx_oracle等模块连接mysql或者oracle。

1.sql:sql语句。

2.con:mysql连接。

3.index_col:指定索引列,默认为None。

4.coerce_float:尝试将非字符型,非数值型转换为浮点数,默认为True。

5.params:列表,元组,字典,默认为None。传递参数到sql语句。

6.parse_datas:列表或字典,默认为None。

7.columns:指定列名,list类型。

8.chunksize:可以返回一个迭代器,默认为None。

import pymysql
import pandas as pd

def select_Tab(table):
    # mysql&#x914D;&#x7F6E;&#x53C2;&#x6570;
    mysql_conf = {
        'host': '127.0.0.1',
        'port': 3306,
        'user': 'root',
        'passwd': '123456',
        'db': 'test',
        'charset': 'utf8'}
    mysql_conn = pymysql.connect(host=mysql_conf['host'], port=mysql_conf['port'],
                                 user=mysql_conf['user'], passwd=mysql_conf['passwd'],
                                 db=mysql_conf['db'], charset=mysql_conf['charset'])
    sql = "select * from " + table
    rc = pd.read_sql(sql, mysql_conn)
    #    cursor = mysql_conn.cursor()
    #    try:
    #        cursor.execute(sql)
    #        rc = cursor.fetchall()
    #
    #    except Exception as e:
    #        print(e)
    #        mysql_conn.rollback()
    #
    #    cursor.close()
    mysql_conn.close()
    return rc

a = select_Tab('sc')

可以看到使用pd.read_sql()函数可以保留列名,而如果使用pymysql库读取则不会保留列名。

读取通用分隔符分割的数据文件到数据框。参数与read_csv完全相同。

read_json           读取json格式文件 将json对象转换为Pandas对象
read_html方法        读取html表格
read_clipboard方法   读取剪切板内容
read_pickle方法      读取plckled持久化文件
read_sql方法         读取数据库数据,连接好数据库后,传入sql语句即可
## read_dhf方法        读取hdf5文件,适合大文件读取
read_parquet方法     读取parquet文件
read_sas方法         读取sas文件
read_stata方法       读取stata文件
read_gbq方法         读取google bigquery数据

numpy创建的数组中元素要求是同种数据类型,对数据分析、挖掘有较大的局限性.

pandas基于Numpy而创建可以处理不同的数据类型,而且有非常利于数据处理的数据结构:序列series和数据框dataframe.序列由两部分组成,一部分是索引,一部分是对应的值

2.1Series序列

import pandas as pd
import numpy as np

l1=(1,4,'h1')   #[1,-2,2.3,'hq']#np.array([1,7.1])
s1=pd.Series(l1)# &#x6307;&#x5B9A;&#x5217;&#x8868;&#x3001;&#x5143;&#x7956;&#x6216;&#x6570;&#x7EC4;&#x521B;&#x5EFA;&#x9ED8;&#x5E8F;&#x5217;,&#x7D22;&#x5F15;&#x4ECE;0&#x5F00;&#x59CB;

l1 = {'red':2000,'blue':1000,'yello':500}
s1 = pd.Series(l1, dtype=float)# &#x901A;&#x8FC7;&#x5B57;&#x5178;&#x521B;&#x5EFA;&#x5E8F;&#x5217;,&#x7D22;&#x5F15;&#x5C31;&#x662F;&#x5B57;&#x5178;key
&#x901A;&#x8FC7;dtype&#x53EF;&#x4EE5;&#x5F3A;&#x5236;&#x6539;&#x53D8;&#x6570;&#x636E;&#x7C7B;&#x578B;
s1 = pd.Series([-2,-2,np.nan,'hq'],index=['a','b','c','d'])# &#x6307;&#x5B9A;&#x5217;&#x8868;&#x548C;&#x7D22;&#x5F15;&#xFF0C;&#x521B;&#x5EFA;&#x4E2A;&#x6027;&#x5316;&#x5E8F;&#x5217;&#xFF0C;&#x6548;&#x679C;&#x548C;&#x7528;&#x5B57;&#x5178;&#x5DEE;&#x4E0D;&#x591A;
np.nan&#x662F;&#x4E00;&#x4E2A;float&#x7C7B;&#x578B;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x4EC0;&#x4E48;&#x65F6;&#x5019;numpy&#x4E2D;&#x51FA;&#x73B0;nan&#xFF0C;&#x6211;&#x4EEC;&#x8BFB;&#x53D6;&#x672C;&#x5730;&#x6587;&#x4EF6;&#x4E3A;float&#x65F6;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x7F3A;&#x5931;&#xFF0C;&#x6216;&#x8005;&#x505A;&#x4E86;&#x4E0D;&#x5408;&#x9002;&#x7684;&#x8BA1;&#x7B97;&#x3002;

s1['d']='aaaa'#&#x53EF;&#x4EE5;&#x968F;&#x65F6;&#x4FEE;&#x6539;&#x5E76;&#x751F;&#x6548;
print(s1['d'])# &#x5E8F;&#x5217;&#x4E2D;&#x7684;&#x5143;&#x7D20;&#x8BBF;&#x95EE;&#x65B9;&#x5F0F;&#x975E;&#x5E38;&#x7B80;&#x5355;&#xFF0C;&#x901A;&#x8FC7;&#x7D22;&#x5F15;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x5BF9;&#x5E94;&#x7684;&#x5143;&#x7D20;&#x503C;
print(s1.get('a3','&#x9ED8;&#x8BA4;&#x503C;'))#&#x901A;&#x8FC7;get&#x65B9;&#x6CD5;&#xFF0C;&#x67E5;&#x627E;&#x5BF9;&#x5E94;&#x7684;&#x7D22;&#x5F15;&#x503C;&#xFF0C;&#x627E;&#x4E0D;&#x5230;&#x6307;&#x5B9A;&#x540E;&#x9762;&#x7684;&#x9ED8;&#x8BA4;&#x503C;
print('c' in s1)#&#x7D22;&#x5F15;&#x503C;&#x5728;c1&#x4E2D;&#x8FD4;&#x56DE;True&#xFF0C;&#x4E0D;&#x5B58;&#x5728;&#x8FD4;&#x56DE;False

&#x5E8F;&#x5217;&#x6709;&#x4E24;&#x4E2A;&#x5C5E;&#x6027;&#xFF0C;&#x5206;&#x522B;&#x662F;&#x503C;&#x548C;&#x7D22;&#x5F15;&#xFF0C;&#x901A;&#x8FC7;index&#x548C;values&#x53EF;&#x4EE5;&#x83B7;&#x5F97;&#x5176;&#x5185;&#x5BB9;
print(s1.index)#Index(['a', 'b', 'c', 'd'], dtype='object')
print(s1.values)#[-2 -2 nan 'hq']

s2=s1.unique()  #&#x53BB;&#x6389;&#x5E8F;&#x5217;&#x4E2D;&#x91CD;&#x590D;&#x7684;&#x5143;&#x7D20;&#x503C;
s2=s1.fillna(999)#&#x6240;&#x6709;&#x7A7A;&#x503C;&#x5143;&#x7D20;&#x586B;&#x5145;999
s2=s1.isin([-2,'hq'])#&#x5224;&#x65AD;&#x5143;&#x7D20;&#x503C;&#x662F;&#x5426;&#x5B58;&#x5728;&#xFF0C;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;bool&#x6570;&#x7EC4;&#xFF0C;&#x5B58;&#x5728;&#x4E3A;true,&#x4E0D;&#x5B58;&#x5728;false
s2=s1.value_counts()#&#x7EDF;&#x8BA1;&#x5E8F;&#x5217;&#x5143;&#x7D20;&#x503C;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;,&#x7D22;&#x5F15;&#x4E3A;&#x5E8F;&#x5217;&#x5143;&#x7D20;&#x7684;&#x503C;&#xFF0C;&#x503C;&#x4E3A;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;
s2=s1.isnull()#&#x5224;&#x65AD;&#x5E8F;&#x5217;&#x662F;&#x5426;&#x6709;&#x7A7A;&#x503C;,&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;bool&#x6570;&#x7EC4;&#xFF0C;&#x662F;&#x8FD4;&#x56DE;true,&#x4E0D;&#x662F;&#x8FD4;&#x56DE;false
s2=s1.notnull()#&#x5224;&#x65AD;&#x5E8F;&#x5217;&#x662F;&#x5426;&#x6709;&#x975E;&#x7A7A;&#x503C;,&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;bool&#x6570;&#x7EC4;&#xFF0C;&#x662F;&#x8FD4;&#x56DE;true,&#x4E0D;&#x662F;&#x8FD4;&#x56DE;false
print(s1[s2])#&#x8F93;&#x51FA;&#x975E;&#x7A7A;&#x6570;&#x636E;
print(s1.dropna())#&#x6E05;&#x6D17;&#x5E8F;&#x5217;&#x4E2D;&#x7684;&#x7A7A;&#x503C;,&#x548C;&#x4E0A;&#x9762;&#x4E00;&#x6837;&#x5F97;&#x51FA;&#x975E;&#x7A7A;&#x6570;&#x636E;

s2 = s1[['a','b']]  # &#x53D6;&#x7D22;&#x5F15;&#x53F7;&#x4E3A;&#x5B57;&#x7B26;a,b&#x7684;&#x5143;&#x7D20;
s2 = s1[0:1]   # &#x7D22;&#x5F15;&#x4E3A;&#x8FDE;&#x7EED;&#x7684;&#x6570;&#x7EC4;
s2 = s1[[0,2,3]]  # &#x7D22;&#x5F15;&#x4E3A;&#x4E0D;&#x8FDE;&#x7EED;&#x7684;&#x6570;&#x7EC4;
s1 = pd.Series([1,2,3,4,5])
s2 = s1[s1>2]  # &#x7D22;&#x5F15;&#x4E3A;&#x903B;&#x8F91;&#x6570;&#x7EC4;&#xFF0C;&#x5BF9;&#x5E94;&#x7684;s1&#x6570;&#x7EC4;&#x5FC5;&#x987B;&#x90FD;&#x662F;&#x6570;&#x5B57;&#xFF0C;&#x6709;&#x5B57;&#x6BCD;&#x4F1A;&#x51FA;&#x9519;

print(s1.sum(),s1.mean(),s1.std(),s1.max(),s1.min(),s1.median(),s1.var())
#sum &#x6C42;&#x548C;&#xFF0C; mean &#x6C42;&#x5E73;&#x5747;&#x6570;&#x636E;&#xFF0C; std &#x6C42;&#x6807;&#x51C6;&#x5DEE;&#xFF0C; max &#x6700;&#x5927;&#x503C;&#xFF0C; min &#x6700;&#x5C0F;&#x503C;&#xFF0C; median &#x4E2D;&#x4F4D;&#x6570;&#xFF0C; var &#x65B9;&#x5DEE;

s1 = pd.Series([1,2,3],index=['a','b','e'])
s2 = pd.Series([9,8,7,6],index=['a','b','c','d'])
print(s1+s2)#&#x7D22;&#x5F15;&#x76F8;&#x540C;&#x7684;&#x5176;&#x5BF9;&#x5E94;&#x503C;&#x4F1A;&#x76F8;&#x52A0;&#xFF0C;&#x4E0D;&#x540C;&#x7684;&#x7D22;&#x5F15;&#x5176;&#x5185;&#x5BB9;&#x503C;&#x90FD;&#x4E3A;NaN

s1 = pd.Series([-2,-2,np.nan,'hq'],index=['a','b','c','d'])
s1.name='Series&#x5BF9;&#x8C61;name'
s1.index.name='&#x7D22;&#x5F15;&#x5217;'
print(s1)#Series&#x5BF9;&#x8C61;&#x548C;&#x7D22;&#x5F15;&#x90FD;&#x53EF;&#x4EE5;&#x6709;&#x4E00;&#x4E2A;&#x540D;&#x5B57;&#xFF0C;&#x5B58;&#x50A8;&#x5728;&#x5C5E;&#x6027;.name&#x4E2D;

2.2dataframe数据框

#&#x8BBE;&#x7F6E;&#x8F93;&#x51FA;&#x5B8C;&#x6574;&#x3001;&#x5BF9;&#x9F50;&#x7684;&#x8868;&#x683C;
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

&#x901A;&#x8FC7;Series&#x5BF9;&#x8C61;&#x5B57;&#x5178;&#x521B;&#x5EFA;
population_dict = {"BeiJing": 2154,"ShangHai": 2424,"ShenZhen": 1303,"HangZhou": 981 }
population = pd.Series(population_dict)
s1=pd.DataFrame(population, columns=["population"])
s1=pd.DataFrame({'population':population,'population2':population})
s1=pd.DataFrame({'population':population,'population2':population,"country": "China"})#&#x6570;&#x91CF;&#x4E0D;&#x591F;&#x7684;&#x4F1A;&#x81EA;&#x52A8;&#x8865;&#x9F50;
df2=pd.DataFrame(np.arange(12).reshape(3,4),index=['a','c','b'],columns=[11,13,10,12])  #&#x5C06;&#x4E8C;&#x7EF4;&#x6570;&#x7EC4;&#x8F6C;&#x5316;&#x4E3A;DataFrame&#x7C7B;&#x578B;&#x6570;&#x636E;
&#x901A;&#x8FC7;&#x5B57;&#x5178;&#x5217;&#x8868;&#x5BF9;&#x8C61;&#x521B;&#x5EFA;
data = [{"a": i, "b": 2*i} for i in range(3)]
print(data)#[{'a': 0, 'b': 0}, {'a': 1, 'b': 2}, {'a': 2, 'b': 4}]
s1=pd.DataFrame(data)
data = [{"a": 1, "b":1},{"b": 3, "c":4}]#&#x4E0D;&#x5B58;&#x5728;&#x7684;&#x952E;&#xFF0C;&#x4F1A;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;NaN
&#x901A;&#x8FC7;Numpy&#x4E8C;&#x7EF4;&#x6570;&#x7EC4;&#x521B;&#x5EFA;
data = np.random.randint(10, size=(3, 2))
s1=pd.DataFrame(data, columns=["foo", "bar"], index=["a", "b", "c"])

data = {'a':pd.Series([1,2,3],index=['i1','i2','i3']),'b':pd.Series([9,8,7,6],index=['i1','i2','i3','i4'])}
data = {'a':[5,3,np.nan,1,6],'b':['d','c','a',np.nan,'q'],'c':[4,6,5,5,6]}
s1=pd.DataFrame(data)#&#x5176;&#x4E2D;&#x5B57;&#x5178;&#x7684;&#x952E;&#x8F6C;&#x5316;&#x4E3A;&#x5217;&#x540D;&#xFF0C;&#x5B57;&#x5178;&#x7684;&#x503C;&#x8F6C;&#x5316;&#x4E3A;&#x5217;&#x503C;&#xFF0C;&#x800C;&#x7D22;&#x5F15;&#x4E0D;&#x8BBE;&#x7F6E;&#x5219;&#x4E3A;&#x9ED8;&#x8BA4;&#x503C;&#xFF0C;&#x5373;&#x4ECE;0&#x5F00;&#x59CB;&#x7531;&#x5927;&#x5230;&#x5C0F;&#x6392;&#x5217;

print(s1)
print(s1.columns,s1.index,s1.values,s1.shape,s1.size,s1.dtypes)#&#x663E;&#x793A;&#x51FA;&#x5217;&#x540D;&#xFF0C;&#x7D22;&#x5F15;&#x8303;&#x56F4;&#x548C;&#x5217;&#x503C;&#x7684;&#x6570;&#x7EC4;,&#x5F62;&#x72B6;,&#x5927;&#x5C0F;,&#x8FD4;&#x56DE;&#x6BCF;&#x5217;&#x6570;&#x636E;&#x7C7B;&#x578B;
s1.replace({'a':{'A':'D','B':'E'}})#dataframe&#x5BF9;&#x8C61;&#x2019;upper&#x2019;&#x5217;&#x4E2D;'A'&#x4FEE;&#x6539;&#x6210;'D','B'&#x4FEE;&#x6539;&#x6210;'E'
s2=s1.dropna()#&#x53BB;&#x6389;&#x7A7A;&#x503C;&#xFF0C;&#x539F;&#x6765;&#x7684;&#x6570;&#x636E;&#x96C6;&#x4E0D;&#x4F1A;&#x53D1;&#x751F;&#x6539;&#x53D8;,&#x65B0;&#x6570;&#x636E;&#x96C6;&#x9700;&#x8981;&#x91CD;&#x65B0;&#x5B9A;&#x4E49;
s2=s1.dropna(axis=0,how='any')#axis=0&#x8868;&#x793A;&#x884C;,axis=1&#x8868;&#x793A;&#x5217;&#xFF1B;how="any"&#x8868;&#x793A;&#x5B58;&#x5728;&#x4EFB;&#x610F;&#x4E00;&#x4E2A;&#x6216;&#x591A;&#x4E2A;&#x7F3A;&#x5931;&#x503C;&#xFF0C;how="all"&#x8868;&#x793A;&#x5168;&#x90E8;&#x4E3A;&#x7F3A;&#x5931;&#x503C;
print(s1)
print(s2)

s2 = s1.fillna('love')  # &#x6240;&#x6709;&#x7A7A;&#x503C;&#x5143;&#x7D20;&#x586B;&#x5145;love,&#x4E5F;&#x53EF;&#x4EE5;&#x8BBE;&#x7F6E;&#x586B;&#x5145;0&#x7B49;
print(s2)
s2 = s1.fillna({'a':10,'b':1})  #&#x8BBE;&#x7F6E;&#x5217;&#x586B;&#x5145;&#xFF0C;&#x53EF;&#x4EE5;&#x5168;&#x90E8;&#x5217;&#x586B;&#x5145;&#x4E5F;&#x53EF;&#x4EE5;&#x90E8;&#x5206;&#x5217;&#x586B;&#x5145;
print(s2)

s2=s1.fillna(method='pad',axis=1) #&#x4F7F;&#x7528;&#x7F3A;&#x5931;&#x503C;&#x7684;&#x524D;&#x4E00;&#x4E2A;&#x503C;&#x8FDB;&#x884C;&#x586B;&#x8865;&#xFF0C;axis=0&#x8868;&#x793A;&#x4F7F;&#x7528;&#x524D;&#x4E00;&#x884C;&#x975E;&#x7F3A;&#x5931;&#x503C;&#x8FDB;&#x884C;&#x586B;&#x8865;&#xFF1B;axis=1&#x8868;&#x793A;&#x4F7F;&#x7528;&#x524D;&#x4E00;&#x5217;&#x8FDB;&#x884C;&#x975E;&#x7F3A;&#x5931;&#x503C;&#x586B;&#x8865;
s2=s1.fillna(method='backfill',axis=0)#&#x4F7F;&#x7528;&#x7F3A;&#x5931;&#x503C;&#x7684;&#x540E;&#x4E00;&#x4E2A;&#x503C;&#x8FDB;&#x884C;&#x586B;&#x8865;&#xFF0C;axis=0&#x8868;&#x793A;&#x4F7F;&#x7528;&#x540E;&#x4E00;&#x884C;&#x7684;&#x975E;&#x7F3A;&#x5931;&#x503C;&#x8FDB;&#x884C;&#x586B;&#x8865;&#xFF0C;axis=1&#x8868;&#x793A;&#x4F7F;&#x7528;&#x540E;&#x4E00;&#x5217;&#x7684;&#x975E;&#x7F3A;&#x5931;&#x503C;&#x8FDB;&#x884C;&#x586B;&#x8865;

s2=s1.sort_values('c',ascending=False)#&#x6307;&#x5B9A;&#x6309;&#x5217;&#x503C;&#x8FDB;&#x884C;&#x6392;&#x5E8F;,&#x9ED8;&#x8BA4;&#x6309;&#x5347;&#x5E8F;&#xFF0C;&#x8FD9;&#x91CC;&#x8BBE;&#x7F6E;&#x4E3A;&#x964D;&#x5E8F;
print(s2)
s2=s1.sort_index(ascending=False)#&#x6309;&#x7D22;&#x5F15;&#x8FDB;&#x884C;&#x6392;&#x5E8F;,&#x9ED8;&#x8BA4;&#x6309;&#x5347;&#x5E8F;&#xFF0C;&#x8FD9;&#x91CC;&#x8BBE;&#x7F6E;&#x4E3A;&#x964D;&#x5E8F;
print(s2)
s2=s1.head(2)#&#x53D6;&#x6570;&#x636E;&#x96C6;&#x4E2D;&#x7684;&#x524D;n&#x884C;
s2=s1.drop('b',axis=1)#&#x5220;&#x9664;&#x6570;&#x636E;&#x96C6;&#x4E2D;&#x7684;&#x5236;&#x5B9A;&#x7684;&#x5217;,&#x9700;&#x6307;&#x5B9A;&#x8F74;&#x4E3A;1

s2 = pd.DataFrame({'d':[1,2,3,4,5]})
s3=s1.join(s2)#&#x5B9E;&#x73B0;&#x4E24;&#x4E2A;&#x6570;&#x636E;&#x6846;&#x4E4B;&#x95F4;&#x7684;&#x6C34;&#x5E73;&#x8FDE;&#x63A5;
print(s3)

n1=s1.to_numpy()#&#x5C06;&#x6570;&#x636E;&#x6846;&#x8F6C;&#x6362;&#x4E3A;numpy&#x6570;&#x7EC4;&#x7684;&#x5F62;&#x5F0F;
print(n1)

print(s2.sum())#&#x5404;&#x5217;&#x6C42;&#x548C;&#xFF0C;&#x542B;&#x6709;&#x5B57;&#x6BCD;&#x5217;&#x4F1A;&#x62A5;&#x9519;
print(s2.mean())#&#x5404;&#x5217;&#x6C42;&#x5E73;&#x5747;&#x503C;,&#x542B;&#x6709;&#x5B57;&#x6BCD;&#x5217;&#x4F1A;&#x62A5;&#x9519;
print(s1.describe())#&#x5404;&#x5217;&#x505A;&#x63CF;&#x8FF0;&#x6027;&#x7EDF;&#x8BA1;

s2 = s1.fillna(99) # &#x6240;&#x6709;&#x7A7A;&#x503C;&#x5143;&#x7D20;&#x586B;&#x5145;0
print(s2)
&#x5229;&#x7528;&#x6570;&#x636E;&#x6846;&#x4E2D;&#x7684;iloc&#x5C5E;&#x6027;&#x8FDB;&#x884C;&#x5207;&#x7247;
s2 = s1.iloc[1:3,2]   # &#x83B7;&#x53D6;&#x4ECE;0&#x5F00;&#x59CB;1,2&#x884C; &#x4ECE;0&#x5F00;&#x59CB;&#x7B2C;2&#x5217;&#x7684;&#x6570;&#x636E;&#x6846;
s2 = s1.iloc[1:3,0:2]  # &#x83B7;&#x53D6;&#x4ECE;0&#x5F00;&#x59CB;1&#xFF0C;2&#x884C;&#xFF0C;&#x4ECE;0&#x5F00;&#x59CB;0,1&#x5217;&#x7684;&#x6570;&#x636E;&#x6846;
s2 = s1.iloc[1:3,:]   # &#x83B7;&#x53D6;&#x4ECE;0&#x5F00;&#x59CB; 1,2&#x884C; &#x6240;&#x6709;&#x5217;&#x7684;&#x6570;&#x636E;&#x6846;
s2 = s1.iloc[[0,2,3],[1,2]]  # &#x83B7;&#x53D6;&#x4ECE;0&#x5F00;&#x59CB; 0&#xFF0C;2,3&#x884C;&#xFF0C;&#x7B2C;1&#xFF0C;2&#x5217;&#x6570;&#x636E;&#x6846;
TF=[True,False,False,True,True]
s2 = s1.iloc[TF,[1]]  # &#x83B7;&#x53D6;&#x7B2C;0&#x3001;3&#x3001;4&#x884C; &#x4ECE;0&#x5F00;&#x59CB;&#xFF0C;&#x7B2C;1&#x5217;&#x7684;&#x6570;&#x636E;

data ={'a':[2,2,np.nan,5,6],'b':['kl','kl','kl',np.nan,'kl'],'c':[4,5,6,np.nan,6],'d':[7,9,np.nan,9,8]}
s1 = pd.DataFrame(data)
&#x5229;&#x7528;loc&#x5C5E;&#x6027;&#x8FDB;&#x884C;&#x5207;&#x7247;
&#x6570;&#x636E;&#x6846;&#x4E2D;&#x7684;loc&#x5C5E;&#x6027;&#xFF0C;&#x4E3B;&#x8981;&#x57FA;&#x4E8E;&#x5217;&#x6807;&#x7B7E;&#x8FDB;&#x884C;&#x7D22;&#x5F15;&#xFF0C;&#x5BF9;&#x5217;&#x503C;&#x8FDB;&#x884C;&#x884C;&#x5B9A;&#x4F4D;&#xFF0C;&#x901A;&#x8FC7;&#x6307;&#x5B9A;&#x5217;&#xFF0C;&#x4ECE;&#x800C;&#x5B9E;&#x73B0;&#x6570;&#x636E;&#x5207;&#x7247;&#x64CD;&#x4F5C;
s2 = s1.loc[s1['b'] == 'kl',:]   # &#x9009;&#x53D6;&#x6240;&#x6709;&#x5217;&#xFF0C;&#x4E14;b&#x884C;&#x6709;&#x7531;kl&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x7EC4;&#x6210;&#x6570;&#x636E;&#x6846;
s2 = s1.loc[s1['b']== 'kl',:].head(3)   # &#x9009;&#x53D6;&#x6240;&#x6709;&#x5217;&#xFF0C;&#x4E14;b&#x884C;&#x6709;&#x7531;kl&#x7684;&#x5143;&#x7D20;&#xFF0C; &#x9009;&#x51FA;&#x524D;&#x4E09;&#x884C;&#xFF0C;&#x7EC4;&#x6210;&#x6570;&#x636E;&#x6846;
s2 = s1.loc[s1['b'] == 'kl',['a','c']].head(3)  # &#x9009;&#x53D6;a,c&#x5217;&#x4E14;&#x6709;kl&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x9009;&#x51FA;&#x524D;&#x4E09;&#x884C;&#xFF0C;&#x7EC4;&#x6210;&#x6570;&#x636E;&#x6846;
s2 = s1.loc[s1['b'] == 'kl',['a','c']]  #  &#x9009;&#x53D6;a,c&#x5217;&#x4E14;&#x6709;kl&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x7EC4;&#x6210;&#x6570;&#x636E;&#x6846;
s2=s1.loc[[1,2]]#&#x83B7;&#x53D6;&#x884C;
s2=s1[['a','b']]#&#x83B7;&#x53D6;&#x5217;
s2=s1.a     #&#x901A;&#x8FC7;&#x5217;&#x540D;&#x76F4;&#x63A5;&#x83B7;&#x53D6;
#&#x83B7;&#x53D6;&#x67D0;&#x4E00;&#x4E2A;&#x503C;
s2=s1.loc[0,'a']#&#x901A;&#x8FC7;&#x7D22;&#x5F15;&#x548C;&#x5217;&#x540D;
s2=s1.iloc[0,1]#&#x901A;&#x8FC7;&#x7D22;&#x5F15;
s2=s1.values[0][1]#&#x901A;&#x8FC7;&#x7D22;&#x5F15;
df[&#x2018;&#x5217;&#x540D;&#x2019;] &#x8FD4;&#x56DE;&#x503C;&#x4E3A;Series&#x7C7B;&#x578B;
df[[&#x2018;&#x5217;&#x540D;&#x2019;]] &#x8FD4;&#x56DE;&#x503C;&#x4E3A;DataFrame&#x7C7B;&#x578B;
s2 = pd.date_range(start='2019-01-01', periods=6)

s2 = pd.DataFrame(np.random.randn(6,4), index=s2, columns=["A", "B", "C", "D"])
&#x884C;&#x5207;&#x7247;
print(s2["2019-01-01": "2019-01-03"])
print(s2.loc["2019-01-01": "2019-01-03"])
&#x5217;&#x5207;&#x7247;
print(s2.loc[:, "a": "c"])
&#x884C;&#x5217;&#x5207;&#x7247;
print(s2.loc["2019-01-02": "2019-01-03", "c":"d"])
s2.loc["2019-01-04": "2019-01-06", ["a", "c"]]
s2.iloc[3:, [0, 2]]
#&#x53D6;&#x503C;
s2.loc[["2019-01-04", "2019-01-06"], ["A", "D"]]
s2.iloc[[1, 5], [0, 3]]

print('!!!'*10)
a=pd.DataFrame(np.arange(12).reshape(3,4))
b=pd.DataFrame(np.arange(20).reshape(4,5))
print(a+b)#+&#x2010;*/&#x7B26;&#x53F7;&#x8FDB;&#x884C;&#x7684;&#x4E8C;&#x5143;&#x8FD0;&#x7B97;&#x4EA7;&#x751F;&#x65B0;&#x7684;&#x5BF9;&#x8C61;,&#x7A7A;&#x7F3A;&#x81EA;&#x52A8;&#x8865;&#x9F50;NaN
print(a+3)#&#x6BCF;&#x4E2A;&#x503C;+3
print(np.exp(a))#e&#x7684;a[i]&#x6B21;&#x65B9;

&#x65B9;&#x6CD5;&#x5F62;&#x5F0F;&#x7684;&#x8FD0;&#x7B97;
fill_value&#x628A;&#x8FD0;&#x7B97;&#x524D;&#x7F3A;&#x7701;&#x7684;NaN&#x7A7A;&#x503C;&#x66FF;&#x6362;&#x540E;&#xFF0C;&#x518D;&#x53C2;&#x4E0E;&#x8FD0;&#x7B97;&#xFF0C;&#x5F97;&#x51FA;&#x7ED3;&#x679C;
c=b.add(a,fill_value=2)#&#x7C7B;&#x578B;&#x95F4;&#x52A0;&#x6CD5;&#x8FD0;&#x7B97;
c=b.sub(a,fill_value=2)#&#x7C7B;&#x578B;&#x95F4;&#x51CF;&#x6CD5;&#x8FD0;&#x7B97;
c=a.mul(b,fill_value=2)#&#x7C7B;&#x578B;&#x95F4;&#x4E58;&#x6CD5;&#x8FD0;&#x7B97;
c=a.div(b,fill_value=2)#&#x7C7B;&#x578B;&#x95F4;&#x9664;&#x6CD5;&#x8FD0;&#x7B97;
print(c)
print(a>5)#&#x6BD4;&#x8F83;&#x8FD0;&#x7B97; >< >= <= =="!=&#x8FD4;&#x56DE;&#x5BF9;&#x5E94;&#x683C;&#x5F0F;&#x7684;bool&#x6570;&#x7EC4;" s2="s1['b'].isin(['kl'])" #相当于series序列中查找一列中的数据返回bool数组 print(s1[s2])#根据一列的bool数组,输出对应的行数据 print(s2) # 添加新列 s1['e']="[2,2,np.nan,5,6]" print(s1) s1.index="[i" for i in range(len(s1))]#修改index,len返回的是行数 df.index="[&#x2018;name1&#x2019;,&#x2018;name2&#x2019;]" 改变数组的行索引名,对原数组修改 df.reindex="[&#x2018;name1&#x2019;,&#x2018;name2&#x2019;,inplace=Falese]" 若指定的索引名不是原数组的索引名,则新添加一行为nan的数据,否则不改变原数组,返回新数组,默认不在原数组修改 df.set_index('列名',drop="True&#xFF0C;inplace=Falese)" 指定某一列为行索引名替换原来的索引名,默认删除此列,且不在原数组修改 df3="df1.set_index(['A','B'])" df4="df3.swaplevel()#&#x8BBE;&#x7F6E;&#x4E86;2&#x4E2A;&#x7D22;&#x5F15;&#x4E4B;&#x540E;&#xFF0C;&#x91C7;&#x7528;&#x8FD9;&#x4E2A;&#x53EF;&#x4EE5;&#x4E92;&#x6362;&#x7D22;&#x5F15;&#x5217;" s1.columns="[i" range(s1.shape[1])]#修改columns,s1.shape[1]指的是行数,[2]是列数 print(s1.head(),s1.head(2),s1.tail(),s1.tail(3),s1.info())#默认前5行,前2行,默认后5行,前3行,查看总体信息 print(s1.isnull())#判断数据是否有缺失,并返回对应的bool数组 print(np.any(s1.isnull()))#存在一个或多个空值的时候即返回true,若不存在空值则返回false print(np.all(s1.isnull())) #当数据全部为空值时,返回为true,否则,返回为false df['b'].isnull()#查看某一列空值 df['b'].unique()#查看某一列的唯一值 数据合并 s3="s1.join(s2)#&#x5B9E;&#x73B0;&#x4E24;&#x4E2A;&#x6570;&#x636E;&#x6846;&#x4E4B;&#x95F4;&#x7684;&#x6C34;&#x5E73;&#x8FDE;&#x63A5;" data1="pd.DataFrame(np.arange(12).reshape(4,3),columns=['a','c','d'])" data2="pd.DataFrame(np.arange(12,24).reshape(3,4),columns=['a','b','c','d'])" df9="pd.concat([data1,data2],axis=0,ignore_index=True)" #将data1与data2进行纵向合并(axis="0&#x8868;&#x793A;&#x7EB5;&#x5411;&#xFF0C;axis=1&#x8868;&#x793A;&#x6A2A;&#x5411;&#xFF09;&#xFF0C;ignore_index=True&#x8868;&#x793A;&#x884C;&#x7D22;&#x5F15;&#x91CD;&#x65B0;&#x53D6;&#x503C;" df11="pd.concat([data1,data2],join='inner',axis=0,ignore_index=True)" #纵向合并,只合data1与data2中共有的列,默认join="outer" , print(df11) df['city']="df['city'].str.lower()#&#x5927;&#x5C0F;&#x5199;&#x8F6C;&#x6362;" df['price'].astype('int')更改数据格式 df.rename(columns="{'category':" 'category-size'})#更改列名称 df['city'].drop_duplicates()#删除后出现的重复值 df['city'].drop_duplicates(keep="last" )#删除先出现的重复值 df['city'].replace('sh', 'shanghai')#数据替换 df_inner="pd.merge(data1,data2,how='outer')#&#x6570;&#x636E;&#x8868;&#x5408;&#x5E76;&#xFF0C;inner&#xFF1A;&#x4EA4;&#x96C6;&#xFF1B;outer&#xFF1A;&#x5E76;&#x96C6;&#xFF0C;&#x8FD8;&#x6709;left&#x3001;right" result="df1.append(df2)#&#x628A;2&#x4E2A;&#x8868;&#x7684;&#x5185;&#x5BB9;&#x7EB5;&#x5411;&#x62FC;&#x63A5;&#x8D77;&#x6765;" print(df_inner) t s2: print(t) print(t[0]) print(t[1]) df_inner['group']="np.where(df_inner['price']"> 3000,'high','low')
&#x5982;&#x679C;prince&#x5217;&#x7684;&#x503C;>3000&#xFF0C;group&#x5217;&#x663E;&#x793A;high&#xFF0C;&#x5426;&#x5219;&#x663E;&#x793A;low
df_inner.loc[(df_inner['city'] == 'beijing') & (df_inner['price'] >= 4000), 'sign']=1
&#x5BF9;&#x590D;&#x5408;&#x591A;&#x4E2A;&#x6761;&#x4EF6;&#x7684;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x5206;&#x7EC4;&#x6807;&#x8BB0;</=>

3.1 to_csv导出到csv

to_csv()是DataFrame类的方法,read_csv()是pandas的方法

content.to_csv('Result.csv') #&#x76F8;&#x5BF9;&#x4F4D;&#x7F6E;&#xFF0C;&#x4FDD;&#x5B58;&#x5728;getwcd()&#x83B7;&#x5F97;&#x7684;&#x8DEF;&#x5F84;&#x4E0B;
content.to_csv('C:/Users/think/Desktop/Result.csv') #&#x7EDD;&#x5BF9;&#x4F4D;&#x7F6E;
content.to_csv(file_path,sep='?')#&#x4F7F;&#x7528;?&#x5206;&#x9694;&#x9700;&#x8981;&#x4FDD;&#x5B58;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x5199;&#xFF0C;&#x9ED8;&#x8BA4;&#x662F;,
content.to_csv(file_path,na_rep='NA') #&#x786E;&#x5B9E;&#x503C;&#x4FDD;&#x5B58;&#x4E3A;NA&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x5199;&#xFF0C;&#x9ED8;&#x8BA4;&#x662F;&#x7A7A;
content.to_csv(file_path,float_format='%.2f') #&#x4FDD;&#x7559;&#x4E24;&#x4F4D;&#x5C0F;&#x6570;
content.to_csv(file_path,columns=['name']) #&#x4FDD;&#x5B58;&#x7D22;&#x5F15;&#x5217;&#x548C;name&#x5217;
content.to_csv(file_path,header=0) #&#x4E0D;&#x4FDD;&#x5B58;&#x5217;&#x540D;
content.to_csv(file_path,index=0) #&#x4E0D;&#x4FDD;&#x5B58;&#x884C;&#x7D22;&#x5F15;

3.2to_excel导出到excel

excel.to_excel(file_path)

要将单个对象写入 Excel .xlsx 文件,只需指定目标文件名。

excel1.to_excel(file_path2,sheet_name='xxx1')

要写入多个工作表,需要使用目标文件名创建ExcelWriter 对象,并在文件中指定要写入的工作表。

with pd.ExcelWriter(file_path2) as writer:
    excel1.to_excel(writer, sheet_name='Sheet_name_1')
    excel2.to_excel(writer, sheet_name='Sheet_name_2')
excel1.to_excel(file_path,na_rep='NA') #&#x786E;&#x7701;&#x503C;&#x4FDD;&#x5B58;&#x4E3A;NA&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x5199;&#xFF0C;&#x9ED8;&#x8BA4;&#x662F;&#x7A7A;
excel1.index.name='&#x6700;&#x5DE6;&#x4E0A;&#x89D2;&#x7A7A;&#x7740;&#x7684;&#x90A3;&#x4E2A;&#x7D22;&#x5F15;'
excel1.to_excel(file_path2,index=False)
#&#x9ED8;&#x8BA4;&#x4E3A;True &#x5199;&#x884C;&#x540D;,&#x8BBE;&#x4E3A;False&#x5219;&#x4E0A;&#x9762;&#x8BBE;&#x7F6E;&#x4E86;&#x4E5F;&#x6CA1;&#x6709;&#x7D22;&#x5F15;
excel1.to_excel(file_path2,float_format="%.2f")#&#x4F1A;&#x5C06; 0.1234 &#x683C;&#x5F0F;&#x5316;&#x4E3A; 0.12
excel1.to_excel(file_path2,na_rep="&#x7A7A;&#x503C;&#x4E86;&#x4E0D;&#x8D77;&#xFF1F;")
excel1.to_excel(file_path2, engine='xlsxwriter')

3.2.其他

columns:str 的序列或列表,可选 要写的列。
header:bool 或 str 列表,默认 True 写出列名。如果给出字符串列表,则假定它是列名的别名。
index_label:str 或序列,可选 如果需要,索引列的列标签。如果未指定,并且 header 和 index 为 True,则使用索引名称。如果 DataFrame 使用 MultiIndex,则应给出一个序列。
startrow:整数,默认 0 左上角单元格行转储数据帧。
startcol:整数,默认 0 左上角单元格列转储 DataFrame 。
merge_cells:布尔值,默认为真 将 MultiIndex 和 Hierarchical Rows 写入合并单元格。
encoding:str,可选 生成的 excel 文件的编码。只有 xlwt 需要,其他编写器原生支持 unicode。
inf_rep:str,默认 'inf' 无穷大的表示(Excel 中没有无穷大的本机表示)。
verbose:布尔值,默认为真 在错误日志中显示更多信息。
freeze_panes:int 元组(长度为 2),可选 指定要冻结的从 1 开始的最底行和最右列。
storage_options:字典,可选 对特定存储连接有意义的额外选项,例如主机、端口、用户名、密码等。对于 HTTP(S) URL,键值对作为标头选项转发到 urllib。对于其他 URL(例如以 "s3://" 和 "gcs://" 开头),键值对被转发到 fsspec 。有关详细信息,请参阅fsspec 和urllib。

Original: https://blog.csdn.net/qq_42759120/article/details/125190614
Author: 木白星枝
Title: Pandas库的学习

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/618088/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球