文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python中Pandas文件操作和读取CSV参数的方法是什么

2023-07-05 07:17

关注

这篇文章主要介绍“Python中Pandas文件操作和读取CSV参数的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python中Pandas文件操作和读取CSV参数的方法是什么”文章能帮助大家解决问题。

一、Pandas 读取文件

二、CSV 文件读取

Python中Pandas文件操作和读取CSV参数的方法是什么

首先,我们对 CSV 文件进行读取,可以通过相对路径,也可以通过 os 动态取得绝对路径 os.getcwd() os.path.json。

import pandas as pddf = 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 osos.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. 基本参数

import pandas as pdpd.read_csv(r"data\students.csv")#idnameaddressgenderbirthday#01朱梦雪地球村女2004/11/2#12许文博月亮星女2003/8/7#23张兆媛艾尔星女2004/11/2#34付延旭克哈星男2003/10/11#45王杰查尔星男2002/6/12#56董泽宇塔桑尼斯男2002/2/12
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)#idnameaddressgenderbirthday#01朱梦雪地球村女2004/11/2#12许文博月亮星女2003/8/7#23张兆媛艾尔星女2004/11/2#34付延旭克哈星男2003/10/11#45王杰查尔星男2002/6/12#56董泽宇塔桑尼斯男2002/2/12

(2) sep:读取 csv 文件时指定的分隔符,默认为逗号。注意:csv 文件的分隔符和我们读取 csv 文件时指定的分隔符一定要一致。

import pandas as pdpd.read_csv(r"data\students_step.csv")#id|name|address|gender|birthday#01|朱梦雪|地球村|女|2004/11/2#12|许文博|月亮星|女|2003/8/7#23|张兆媛|艾尔星|女|2004/11/2#34|付延旭|克哈星|男|2003/10/11#45|王杰|查尔星|男|2002/6/12#56|董泽宇|塔桑尼斯|男|2002/2/12

由于指定的分隔符和 csv 文件采用的分隔符不一致,因此多个列之间没有分开,而是连在一起了。 所以,我们需要将分隔符设置成 \t 才可以。

df = pd.read_csv(r"data\students_step.csv", sep="|")df#idnameaddressgenderbirthday#01朱梦雪地球村女2004/11/2#12许文博月亮星女2003/8/7#23张兆媛艾尔星女2004/11/2#34付延旭克哈星男2003/10/11#45王杰查尔星男2002/6/12#56董泽宇塔桑尼斯男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#idnameaddressgenderbirthday#01朱梦雪地球村女2004/11/2#12许文博\t月亮星女2003/8/7NaN#23张兆媛艾尔星女2004/11/2#34付延旭克哈星男2003/10/11#45王杰\t查尔星男2002/6/12NaN#56董泽宇\t塔桑尼斯男2002/2/12NaN

对此,我们将 delim_whitespace 设置为 True,便会得到我们想要的读取结果。

df = pd.read_csv(r"data\students_whitespace.txt", delim_whitespace=True)df#idnameaddressgenderbirthday#01朱梦雪地球村女2004/11/2#12许文博月亮星女2003/8/7#23张兆媛艾尔星女2004/11/2#34付延旭克哈星男2003/10/11#45王杰查尔星男2002/6/12#56董泽宇塔桑尼斯男2002/2/12
pd.read_csv(r"data\students.csv")#idnameaddressgenderbirthday#01朱梦雪地球村女2004/11/2#12许文博月亮星女2003/8/7#23张兆媛艾尔星女2004/11/2#34付延旭克哈星男2003/10/11#45王杰查尔星男2002/6/12#56董泽宇塔桑尼斯男2002/2/12
pd.read_csv(r"data\students.csv", header=1)#1朱梦雪地球村女2004/11/2#02许文博月亮星女2003/8/7#13张兆媛艾尔星女2004/11/2#24付延旭克哈星男2003/10/11#35王杰查尔星男2002/6/12#46董泽宇塔桑尼斯男2002/2/12

(c) names 被赋值,header 没有被赋值:

pd.read_csv(r"data\students.csv", names=["编号", "姓名", "地址", "性别", "出生日期"])#编号姓名地址性别出生日期#0idnameaddressgenderbirthday#11朱梦雪地球村女2004/11/2#22许文博月亮星女2003/8/7#33张兆媛艾尔星女2004/11/2#44付延旭克哈星男2003/10/11#55王杰查尔星男2002/6/12#66董泽宇塔桑尼斯男2002/2/12
pd.read_csv(r"data\students.csv",            names=["编号", "姓名", "地址", "性别", "出生日期"],            header=1)#编号姓名地址性别出生日期#02许文博月亮星女2003/8/7#13张兆媛艾尔星女2004/11/2#24付延旭克哈星男2003/10/11#35王杰查尔星男2002/6/12#46董泽宇塔桑尼斯男2002/2/12
df = pd.read_csv(r"data\students.csv", index_col="birthday")df#           id name  address gender#birthday#2004/11/21朱梦雪地球村女#2003/8/72许文博月亮星女#2004/11/23张兆媛艾尔星女#2003/10/114付延旭克哈星男#2002/6/125王杰查尔星男#2002/2/126董泽宇塔桑尼斯 男

也可以用来删除指定列。

df.index=df['birthday']del df['birthday']df#          idnameaddressgender#birthday#2004/11/21朱梦雪地球村女#2003/8/72许文博月亮星女#2004/11/23张兆媛艾尔星女#2003/10/114付延旭克哈星男#2002/6/125王杰查尔星男#2002/2/126董泽宇塔桑尼斯男

我们在读取的时候指定了 name 列作为索引; 此外,除了指定单个列,还可以指定多列作为索引,比如 [“id”, “name”]。同时,我们除了可以输入列名外,还可以输入列对应的索引。比如:“id”、“name”、“address”、"date"对应的索引就分别是 0、1、2、3。

df2 = pd.read_csv(r"data\students.csv", index_col=["gender","birthday"])df2#             idnameaddress#genderbirthday#女2004/11/21朱梦雪地球村#   2003/8/72许文博月亮星#   2004/11/23张兆媛艾尔星#男2003/10/114付延旭克哈星#   2002/6/125王杰查尔星#   2002/2/126董泽宇塔桑尼斯

使用 loc 删选也是同样的道理。

df2.loc["女"]#         idnameaddress#birthday#2004/11/21朱梦雪地球村#2003/8/72许文博月亮星#2004/11/23张兆媛艾尔星
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
pd.read_csv(r"data\students_gbk.csv", encoding="gbk") #idnameaddressgenderbirthday#01朱梦雪地球村女2004/11/2#12许文博月亮星女2003/8/7#23张兆媛艾尔星女2004/11/2#34付延旭克哈星男2003/10/11#45王杰查尔星男2002/6/12#56董泽宇塔桑尼斯男2002/2/12
df = pd.read_csv(r"data\students_step_001.csv", sep="|")df#idnameaddressgenderbirthday#01朱梦雪地球村女2004/11/2#12许文博月亮星女2003/8/7#23张兆媛艾尔星女2004/11/2#34付延旭克哈星男2003/10/11#45王杰查尔星男2002/6/12#56董泽宇塔桑尼斯男2002/2/12

我们将 id 的数据类型设置为字符串,便可以显示为 001 之类的。

df = pd.read_csv(r"data\students_step_001.csv", sep="|", dtype ={"id":str}) df#idnameaddressgenderbirthday#0001朱梦雪地球村女2004/11/2#1002许文博月亮星女2003/8/7#2003张兆媛艾尔星女2004/11/2#3004付延旭克哈星男2003/10/11#4005王杰查尔星男2002/6/12#5006董泽宇塔桑尼斯男2002/2/12
pd.read_csv('data\students.csv', converters={"id": lambda x: int(x) + 10})#idnameaddressgenderbirthday#011朱梦雪地球村女2004/11/2#112许文博月亮星女2003/8/7#213张兆媛艾尔星女2004/11/2#314付延旭克哈星男2003/10/11#415王杰查尔星男2002/6/12#516董泽宇塔桑尼斯男2002/2/12
pd.read_csv('data\students.csv', true_values=['男'], false_values=['女'])#   idnameaddressgenderbirthday#01朱梦雪地球村False2004/11/2#12许文博月亮星False2003/8/7#23张兆媛艾尔星False2004/11/2#34付延旭克哈星True2003/10/11#45王杰查尔星True2002/6/12#56董泽宇塔桑尼斯True2002/2/12
pd.read_csv('data\students.csv', skiprows=[0,3])#   1朱梦雪地球村女2004/11/2#02许文博月亮星女2003/8/7#14付延旭克哈星男2003/10/11#25王杰查尔星男2002/6/12#36董泽宇塔桑尼斯男2002/2/12

这里把第一行过滤掉了,因为第一行是表头,所以在过滤掉之后第二行就变成表头了。 当然里面除了传入具体的数值,来表明要过滤掉哪些行,还可以传入一个函数。

pd.read_csv('data\students.csv', skiprows=lambda x: x > 0 and x % 2 == 0)#  idnameaddressgenderbirthday#01朱梦雪地球村女2004/11/2#13张兆媛艾尔星女2004/11/2#25王杰查尔星男2002/6/12
pd.read_csv('data\students.csv', skipfooter=1)

上述代码运行后会出现报错,并且表格中的数据都变成乱码,具体原因下方有解释。

pd.read_csv('data\students.csv', skipfooter=1, engine="python", encoding="utf-8")#  idnameaddressgenderbirthday#01朱梦雪地球村女2004/11/2#12许文博月亮星女2003/8/7#23张兆媛艾尔星女2004/11/2#34付延旭克哈星男2003/10/11#45王杰查尔星男2002/6/12
pd.read_csv('data\students.csv', nrows=3)#  idnameaddressgenderbirthday#01朱梦雪地球村女2004/11/2#12许文博月亮星女2003/8/7#23张兆媛艾尔星女2004/11/2

3. 空值处理相关参数

na_values:该参数可以配置哪些值需要处理成 NaN。

pd.read_csv('data\students.csv', na_values=["女", "朱梦雪"])  #idnameaddressgenderbirthday#01NaN地球村NaN2004/11/2#12许文博月亮星NaN2003/8/7#23张兆媛艾尔星NaN2004/11/2#34付延旭克哈星男2003/10/11#45王杰查尔星男2002/6/12#56董泽宇塔桑尼斯男2002/2/12

可以看到将女和朱梦雪设置成了NaN,这里的情况是不同的列中包含了不同的值。

4. 时间处理相关参数

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. 分块读入相关参数

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

关于“Python中Pandas文件操作和读取CSV参数的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯