栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Pandas库的学习

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pandas库的学习

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

一.读取文件的方法

1.read_csv方法

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

import pandas as pd

file_path=r'D:pythonProject数学建模data1附件1 弱覆盖栅格数据(筛选).csv'#'test.csv'
content=pd.read_csv(file_path)#读取csv文件,可以是文件路径,也可以是一个URL,如果访问该URL会返回一个文件的话,那么pandas的read_csv函数会自动将该文件进行读取。

#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数组

content=pd.read_csv(file_path, usecols=["x", "y"])#usecols选择想要提取的列,选择列名的长度大于 4 的列:usecols=lambda x: len(x) > 4

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对象只有一种索引

content=pd.read_csv(file_path, dtype={"x": str,'y':str})#dtype来指定某个列的类型
content["x"] = content["x"] * 3

content=pd.read_csv(file_path, converters={"id": lambda x: int(x) + 10})#converters可以在读取的时候对列数据进行变换
#使用converters参数时,解析器默认所有列的类型为 str,所以需要显式类型转换

content=pd.read_csv(file_path, true_values=["对"], false_values=["错"])
content=pd.read_csv(file_path, false_values=["错", "对"])
# true_values和false_value指定哪些值应该被清洗为True,哪些值被清洗为False
# 只有当某一列的数据全部出现在true_values + false_values里面,才会被替换


content=pd.read_csv(file_path,skiprows=[0])
content=pd.read_csv(file_path, skiprows=lambda x: x > 0 and x % 2 == 0)
# skiprows 表示过滤行,想过滤掉哪些行,先过滤,然后再确定表头

content=pd.read_csv(file_path, skipfooter=3, encoding="utf-8", engine="python")
# skipfooter:接收整型,表示从结尾往上过滤掉指定数量的行,解析引擎退化为 Python。这是因为 C 解析引擎没有这个特性。

content=pd.read_csv(file_path, nrows=1)#nrows 设置一次性读入的文件行数
# 它在读入大文件时很有用,比如 16G 内存的PC无法容纳几百 G 的大文件。很多时候我们只是想看看大文件内部的字段长什么样子

content=pd.read_csv(file_path, na_values=["对", "古明地觉"])
# na_values 参数可以配置哪些值需要处理成 NaN,针对整个csv中的全部数据,下面是只对指定的列进行替换
content=pd.read_csv(file_path, sep="t", na_values={"x": ["古明地觉", "博丽灵梦"], "y": ["对"]})

content=pd.read_csv(file_path, na_values=["", "NULL"],keep_default_na=False)
# 除了 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_filter=False,skip_blank_lines=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 来改变这一点


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日"))
# parse_dates,指定某些列为时间类型,这个参数一般搭配下面的date_parser使用。
# date_parser是用来配合parse_dates参数的,因为有的列虽然是日期,但没办法直接转化,需要我们指定一个解析格式:
# infer_datetime_format 参数默认为 False。如果设定为 True 并且 parse_dates 可用,
# 那么 pandas 将尝试转换为日期类型,如果可以转换,转换方法并解析,在某些情况下会快 5~10 倍。

print(content)

# 分块读入内存,尤其单机处理大文件时会很有用。
# iterator 为 bool类型,默认为False。如果为True,那么返回一个 TextFileReader 对象,以便逐块处理文件。
# 这个在文件很大、内存无法容纳所有数据文件时,可以分批读入,依次处理。
chunk = pd.read_csv(file_path, iterator=True)
print(chunk)  # 

print(chunk.get_chunk(1))#依次从剩余的数据中读取前1行
print(chunk.get_chunk(2))#依次从剩余的数据中读取前2行
# 文件还剩下三行,但是我们指定读取100,那么也不会报错,不够指定的行数,那么有多少返回多少
print(chunk.get_chunk(100))
try:
    # 但是在读取完毕之后,再读的话就会报错了
    chunk.get_chunk(5)
except StopIteration as e:
    print("读取完毕")
# 读取完毕


file_path=r'D:pythonProject数学建模data1附件1 弱覆盖栅格数据(筛选).csv'#'test.csv'
# chunksize 整型,默认为 None,设置读取文件块的大小。
chunk = pd.read_csv(file_path, chunksize=2)
# 还是返回一个类似于迭代器的对象
print(chunk)  # 
# 调用get_chunk,如果不指定行数,那么就是默认的chunksize
print(chunk.get_chunk())
# 但也可以指定
print(chunk.get_chunk(100))
try:
    chunk.get_chunk(5)
except StopIteration as e:
    print("读取完毕")
# 读取完毕

# content=pd.read_csv(file_path,sep='t',delim_whitespace=True)
#sep指定分隔符,delim_whitespace设置为 True 时,表示分割符为空白字符,可以是空格、"t"等等。
# 参数 mangle_dupe_cols 默认为 True,重名的列导入后面多一个 .1。如果设置为 False,会抛出不支持的异常:


# compression 参数取值为 {'infer', 'gzip', 'bz2', 'zip', 'xz', None},默认 'infer',这个参数直接支持我们使用磁盘上的压缩文件。
# 直接将上面的girl.csv添加到压缩文件,打包成girl.zip
pd.read_csv('girl.zip', sep="t", compression="zip")
# housands 千分位分割符,如 , 或者 .,默认为None。
# encoding 指定字符集类型,通常指定为 'utf-8'。根据情况也可能是'ISO-8859-1'

# error_bad_lines和warn_bad_lines 两参数只能在C解析引擎下使用。
# 如果一行包含过多的列,假设csv的数据有5列,但是某一行却有6个数据,数据有问题。那么默认情况下不会返回DataFrame,而是会报错。
# 这时,我们就可以将error_bad_lines设置为False(默认为True),遇到这种情况,直接把这一行扔掉。同时会设置 warn_bad_lines 设置为True,打印剔除的这行。
pd.read_csv('girl.csv', sep="t", error_bad_lines=False, warn_bad_lines=True)


print(content)

2.read_excel方法

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号