• Pandas文件读写操作


    文件操作:

    Pandas中提供了许多的操作文件的函数,包括读取和写入。我们做数据分析用得最多的,就是CSVExcelSQLJSON文件。下面来针对这几种文件的操作做一个详细的讲解。

    CSV文件操作:

    读写CSV文件分别用的是pd.read_csvpd.to_csv方法。普通用法非常简单,但是通过一些参数,可以实现许多高级操作。

    1. 读取csv:

    读取csv用的是pd.read_csv,主要有以下参数:

    1. filepath_or_buffer:文件路径,或者是有read方法的流对象。
    2. sep:分隔符,默认是,
    3. header:指定哪行作为列的名称,如果没有行作为列名,那么应该设置header=None,并且设置names参数。
    4. names:在csv文件中没有一行来存储列名,可以使用names自己指定,并且设置header=None。
    5. index_col:使用哪一列作为行索引,可以是列的位置,也可以是列的名称。如果没有指定,那么默认会自动生成一个顺序索引。
    6. usecols:加载哪几列。比如有时候只想要csv文件中的某几列,那么就可以使用usecols。也可以是个函数,这个函数返回True的列会被保留,否则会丢弃。
    7. engine:csv解析引擎,有C和Python,C速度更快,但是Python功能更完善。
    8. dtype:指定某些列的类型。
    9. converters:转换器列表,可以指定每一列在加载的时候就转换为指定的类型。
    10. encoding:使用指定的编码方式打开文件。
    11. chunksize:使用迭代器的方式读取,一次返回多少行的数据。

    更多参数请查看Pandas官网read_csv:https://pandas.pydata.org/docs/user_guide/io.html#io-read-csv-table

    2. 写入csv:

    写入csv用的是pd.to_csvSeriesDataFrame都可以使用这个方法。主要有以下参数:

    1. path_or_buf:写入的文件路径、缓存或者是文件对象,如果是文件对象,那么这个文件对象在打开的时候必须指定newline=''
    2. sep:存储成csv文件格式化的分隔符。
    3. na_repNAN值的替代字符串,默认是空的。
    4. float_format:格式化浮点类型字符串。
    5. columns:哪些列需要写入到csv文件中。
    6. header:是否把列的名称也写入进去,默认为True。
    7. index:是否把行索引名称也写入进去,默认为True。
    8. encoding:存储的csv文件编码方式。
    9. chunksize:一次性写入多少行。

    更多的参数请查看Pandas官网to_csv:https://pandas.pydata.org/docs/user_guide/io.html#io-store-in-csv

    Excel文件操作:

    1. 读取Excel:

    读取Excel文件用的是pd.read_excel方法。因为Excel文件有两种类型,分别是2007年后的.xlsx和2003年的.xls。其中.xlsx需要借助openpyxl库,.xls需要借助xlrd库。如果这两个库没有安装,在运行的时候可能会报错,因此可以提前通过以下命令安装:

    $ pip install openpyxl
    $ pip install xlrd
    
    • 1
    • 2

    下面来讲解一下pd.read_excel的基本用法。先看一个最简单的示例代码:

    pd.read_excel("path_to_file.xls", sheet_name="Sheet1")
    
    • 1

    首先指定Excel文件路径,然后通过sheet_name参数指定读取Excel文件的哪个Sheet。如果Excel的Sheet比较多,那么我们可以先使用ExcelFile类把所有Sheet都读取出来,再使用pd.read_excel分别读取。这种方式比直接直接多次使用pd.read_excel效率更高。示例代码如下:

    xlsx = pd.ExcelFile("path_to_file.xls")
    df = pd.read_excel(xlsx, "Sheet1")
    
    • 1
    • 2

    或者是:

    with pd.ExcelFile("path_to_file.xls") as xls:
        df1 = pd.read_excel(xls, "Sheet1")
        df2 = pd.read_excel(xls, "Sheet2")
    
    • 1
    • 2
    • 3

    pd.read_excel的其他参数,除了没有chunksize外,与pd.read_csv相同。

    更多pd.read_excel的用法,请参考Pandas官方文档:https://pandas.pydata.org/docs/user_guide/io.html#io-excel-reader

    2. 写入Excel:

    写入Excel用的是pd.to_excel方法,使用方法与pd.to_csv非常的类似,但是可以指定sheet_name参数。并且官方强烈建议使用openpyxl库作为引擎,将数据保存保存为xlsx文件,如果使用xlwt库将数据保存为xls文件,出现问题官方是不会负责修复的,因为已经不支持了(具体可以看:https://pandas.pydata.org/docs/user_guide/io.html#excel-files)。
    基本用法如下:

    df.to_excel("path_to_file.xlsx", sheet_name="Sheet1")
    
    • 1

    也可以使用ExcelWriter类,写入多个DataFrame到多个Sheet中。示例代码如下:

    with pd.ExcelWriter("path_to_file.xlsx") as writer:
        df1.to_excel(writer, sheet_name="Sheet1")
        df2.to_excel(writer, sheet_name="Sheet2")
    
    • 1
    • 2
    • 3

    更多pd.to_excel的用法,请参考Pandas官方文档:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html#pandas.DataFrame.to_excel

    SQL操作:

    操作SQL主要有以下几个函数:

    1. read_sql_table(table_name, conn, ...):用于读取一张表中的数据。
    2. read_sql_query(sql, con, ...):执行SQL语句,读取到DataFrame中。
    3. read_sql(sql_or_tablename, con, ...)read_sql_tableread_sql_query两者结合,会自动判断第一个参数是否为表名还是sql语句。
    4. DataFrame.to_sql(name, con, ...):将DataFrame数据写入到数据库中。name指定一个表名。

    操作SQL需要借助SQLAlchemy,如果没有安装,则需要通过pip install sqlalchemy安装一下。使用SQLAlchemy连接数据库,会根据不同的数据库,使用不同的连接方式。

    1. SQLite"sqlite:///[database name].db"
    2. MySQL"mysql+pymysql://[username]:[password]@[host]:[port]/[database name]?charset=utf8"
    3. PostgreSQL"postgresql://[username]:[password]@[host]:[port]/[database name]"
    4. Oracle"oracle://scott:tiger@127.0.0.1:1521/sidname"

    这里我们以sqlite为例来讲解上述方法的使用。

    1. 写入SQL:

    为了方便演示SQL操作,我们先使用to_sql,将一个DataFrame数据写入到数据库中。示例代码如下:

    # 读取excel中的数据
    df = pd.read_excel("data/salesfunnel.xlsx")
    
    # 创建数据库连接
    from sqlalchemy import create_engine
    engine = create_engine("sqlite:///salessfunnel.db")
    
    # 将df数据,写入到sqlite数据库中,并且表名为funnel
    df.to_sql("funnel", engine, index=False)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2. read_sql_table读取表数据:

    使用read_sql_table可以将指定表中所有的数据都读取出来(当然也可以使用chunksize来分段读取)。示例代码如下:

    funnel = pd.read_sql_table("funnel", engine)
    
    • 1

    如果使用chunksize参数,那么将返回一个生成器。可以循环获取里面的数据,示例代码如下:

    funnel = pd.read_sql_table("funnel", engine, chunksize=3)
    for chunk in funnel:
        print(chunk)
    
    • 1
    • 2
    • 3

    在循环funnel的时候,每个chunk都是含有三条数据的DataFrame对象。

    3. read_sql_query执行SQL查询语句:

    在获取数据的时候,如果需要过滤数据,或者是多表查询,那么可以使用read_sql_query来执行sql语句。示例代码如下:

    df2 = pd.read_sql_query("select Account, Name from funnel where Product='CPU'", engine)
    print(df2)
    
    • 1
    • 2

    输出结果如下:

            Account	Name
    0	714466	Trantow-Barrows
    1	737550	Fritsch, Russel and Anderson
    2	146832	Kiehn-Spinka
    3	218895	Kulas Inc
    4	740150	Barton LLC
    5	141962	Herman LLC
    6	163416	Purdy-Kunde
    7	688981	Keeling LLC
    8	729833	Koepp Ltd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4. read_sql读取数据:

    read_sql是结合了read_sql_tableread_sql_query两者的功能。既可以从表中读取数据,也可以执行查询SQL语句。示例代码如下:

    # 读取表数据
    funnel = pd.read_sql("funnel", engine)
    # 执行查询SQL语句
    funnel = pd.read_sql("select Account, Name from funnel where Product='CPU'", engine)
    
    • 1
    • 2
    • 3
    • 4

    更多:

    更多其他文件操作,请参考Pandas官网:https://pandas.pydata.org/docs/user_guide/io.html

  • 相关阅读:
    Spring声明式事务管理(基于Annotation注解方式实现)
    Java进阶——IO 流
    格力报案称“高管遭自媒体侮辱诽谤”
    嵌入式操作系统--机房管理系统
    2023-10-10 mysql-{rea_create_base_table}-失败后回滚-记录
    OSN 1800 I 增强型华为多业务光传送设备
    【系统美化】快速打开鼠标样式切换的对话框
    Godot 官方2D C#重构(2):弹幕躲避
    无人机反制软硬手段
    Prometheus系列(4)之Springboot集成Micrometer的JVM监控
  • 原文地址:https://blog.csdn.net/qq_41404557/article/details/125898468