学无先后,达者为师

网站首页 编程语言 正文

Pandas文件读写操作

作者:Begin to change 更新时间: 2022-07-21 编程语言

文件操作:

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

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

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

首先指定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")

或者是:

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

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")

也可以使用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")

更多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)

2. read_sql_table读取表数据:

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

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

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

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

在循环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)

输出结果如下:

        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

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)

更多:

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

原文链接:https://blog.csdn.net/qq_41404557/article/details/125898468

栏目分类
最近更新