Pandas(十三)--读写文件

目录

CSV文件

read_csv()

to_csv()

read_excel()

to_excel()

json文件

read_json()

to_json()

SQL数据库读取

1) 安装pysqlite3模块

2) 建立数据连接

3) 数据库读取数据

当使用 Pandas 做数据分析的时,需要读取事先准备好的数据集,这是做数据分析的第一步。Panda 提供了多种读取数据的方法:

  • read_csv() 用于读取文本文件
  • read_excel() 用于读取Excel表格
  • read_json() 用于读取 json 文件
  • read_sql_query() 读取 sql 语句的

也提供数据存储方法:

  • to_csv() 用于存储文本文件
  • to_excel() 用于存储Excel表格
  • to_json() 用于存储 json 文件

CSV文件

CSV 又称逗号分隔值文件,是一种简单的文件格式,以特定的结构来排列表格数据。 CSV 文件能够以纯文本形式存储表格数据,比如电子表格、数据库文件,并具有数据交换的通用格式。CSV 文件会在 Excel 文件中被打开,其行和列都定义了标准的数据格式。

将 CSV 中的数据转换为 DataFrame 对象是非常便捷的。和一般文件读写不一样,它不需要打开文件、读取文件、关闭文件等操作。相反,您只需要一行代码就可以完成上述所有步骤,并将数据存储在 DataFrame 中。文件的读写操作属于计算机的 IO 操作,Pandas IO 操作提供了一些读取器函数,比如 pd.read_csv()、pd.read_excel()、pd.read_json() 等,它们都返回一个 Pandas 对象。

其中 read_csv 的语法格式,如下:

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',names=None, index_col=None, usecols=None)

下面进行实例演示,首先您需要创建一组数据,并将其保存为 CSV 格式,数据如下:

Name,Hire Date,Salary,Leaves Remaining 
John Idle,08/15/14,50000.00,10 
Smith Gilliam,04/07/15,65000.00,6 
Parker Chapman,02/21/14,45000.00,7 
Jones Palin,10/14/13,70000.00,3 
Terry Gilliam,07/22/14,48000.00,9 
Michael Palin,06/28/13,66000.00,8  

注意:将上述数据保存到test.txt的文本文件中,然后将文件的扩展名后缀修改为 csv,即可完成 csv 文件的创建。 

read_csv()

# 接下来,使用下列代码读写数据:
import pandas as pd
#仅仅一行代码就完成了数据读取,但是注意文件路径不要写错
df = pd.read_csv('test.csv')
print(df)

输出结果:
             Name Hire Date   Salary  Leaves Remaining 
0       John Idle  08/15/14  50000.0                10
1   Smith Gilliam  04/07/15  65000.0                 6
2  Parker Chapman  02/21/14  45000.0                 7
3     Jones Palin  10/14/13  70000.0                 3
4   Terry Gilliam  07/22/14  48000.0                 9
5   Michael Palin  06/28/13  66000.0                 8

1) 自定义索引

在 CSV 文件中指定了一个列,然后使用index_col可以实现自定义索引。

df=pd.read_csv("test.csv",index_col=['Name'])
print(df)

输出结果:
               Hire Date   Salary  Leaves Remaining
Name
John Idle       08/15/14  50000.0                 10
Smith Gilliam   04/07/15  65000.0                  6
Parker Chapman  02/21/14  45000.0                  7
Jones Palin     10/14/13  70000.0                  3
Terry Gilliam   07/22/14  48000.0                  9
Michael Palin   06/28/13  66000.0                  8

2) 查看每一列的dtype

import numpy as np
#转换salary为int64类型
df=pd.read_csv("test.csv",dtype={'Salary':np.int64})
print(df.dtypes)

输出结果:
Name                 object
Hire Date            object
Salary                int64
Leaves Remaining      int64
dtype: object
注意:默认情况下,Salary 列的 dtype 是 float 类型,但结果显示其为 int 类型

3) 更改文件标头名

# 使用 names 参数可以指定头文件的名称。

import pandas as pd
df=pd.read_csv("test.csv",names=['a','b','c','d'])
print(df)

输出结果:
                a          b         c                  d
0            Name  Hire Date    Salary  Leaves Remaining
1       John Idle   08/15/14  50000.00                10
2   Smith Gilliam   04/07/15  65000.00                 6
3  Parker Chapman   02/21/14  45000.00                 7
4     Jones Palin   10/14/13  70000.00                 3
5   Terry Gilliam   07/22/14  48000.00                 9
6   Michael Palin   06/28/13  66000.00                8

注意:文件标头名是附加的自定义名称,但是您会发现,原来的标头名(列标签名)并没有被删除,此时可以使用header参数来删除它。

通过传递标头所在行号实现删除,假如原标头名并没有定义在第一行,您也可以传递相应的行号来删除它。如下所示:

df=pd.read_csv("test.csv",names=['a','b','c','d'],header=0)
print(df)

输出结果:
                a         b        c   d
0       John Idle  08/15/14  50000.0  10
1   Smith Gilliam  04/07/15  65000.0   6
2  Parker Chapman  02/21/14  45000.0   7
3     Jones Palin  10/14/13  70000.0   3
4   Terry Gilliam  07/22/14  48000.0   9
5   Michael Palin  06/28/13  66000.0   8

4) 跳过指定的行数

skiprows参数表示跳过指定的行数。

df=pd.read_csv("test.csv",skiprows=2)
print(df)

输出结果:
    Smith Gilliam  04/07/15  65000.00  6
0  Parker Chapman  02/21/14   45000.0   7
1     Jones Palin  10/14/13   70000.0   3
2   Terry Gilliam  07/22/14   48000.0   9
3   Michael Palin  06/28/13   66000.0   8

注意:包含标头所在行。

to_csv()

Pandas 提供的 to_csv() 函数用于将 DataFrame 转换为 CSV 数据。如果想要把 CSV 数据写入文件,只需向函数传递一个文件对象即可。否则,CSV 数据将以字符串格式返回。

下面看一组简单的示例:

  1. import pandas as pd
  2. data = {'Name': ['Smith', 'Parker'], 'ID': [101, 102], 'Language': ['Python', 'JavaScript']}
  3. info = pd.DataFrame(data)
  4. print('DataFrame Values:\n', info)
  5. #转换为csv数据
  6. csv_data = info.to_csv()
  7. print('\nCSV String Values:\n', csv_data)

输出结果:

DataFrame:
      Name   ID    Language
0   Smith  101      Python
1  Parker  102  JavaScript

csv数据:
,Name,ID,Language
0,Smith,101,Python
1,Parker,102,JavaScript

指定 CSV 文件输出时的分隔符

代码如下:

  1. import pandas as pd
  2. #注意:pd.NaT表示null缺失数据
  3. data = {'Name': ['Smith', 'Parker'], 'ID': [101, pd.NaT], 'Language': ['Python', 'JavaScript']}
  4. info = pd.DataFrame(data)
  5. csv_data = info.to_csv("C:/Users/Administrator/Desktop/pandas.csv",sep='|')

read_excel()

Excel 是由微软公司开发的办公软件之一,它在日常工作中得到了广泛的应用。在数据量较少的情况下,Excel 对于数据的处理、分析、可视化有其独特的优势,因此可以显著提升您的工作效率。但是,当数据量非常大时,Excel 的劣势就暴露出来了,比如,操作重复、数据分析难等问题。Pandas 提供了操作 Excel 文件的函数,可以很方便地处理 Excel 表格。

读取 Excel 表格中的数据,可以使用 read_excel() 方法,其语法格式如下:

pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None,
              usecols=None, squeeze=False,dtype=None, engine=None,
              converters=None, true_values=None, false_values=None,
              skiprows=None, nrows=None, na_values=None, parse_dates=False,
              date_parser=None, thousands=None, comment=None, skipfooter=0,
              convert_float=True, **kwds)

下表对常用参数做了说明:

参数名称说明
io表示 Excel 文件的存储路径。
sheet_name要读取的工作表名称。
header指定作为列名的行,默认0,即取第一行的值为列名;若数据不包含列名,则设定 header = None。若将其设置
为 header=2,则表示将前两行作为多重索引。
names一般适用于Excel缺少列名,或者需要重新定义列名的情况;names的长度必须等于Excel表格列的长度,否则会报错。
index_col用做行索引的列,可以是工作表的列名称,如 index_col = '列名',也可以是整数或者列表。
usecolsint或list类型,默认为None,表示需要读取所有列。
squeezeboolean,默认为False,如果解析的数据只包含一列,则返回一个Series。
converters规定每一列的数据类型。
skiprows接受一个列表,表示跳过指定行数的数据,从头部第一行开始。
nrows需要读取的行数。
skipfooter接受一个列表,省略指定行数的数据,从尾部最后一行开始。

示例如下所示,对下列的xlsx表格进行操作:

import pandas as pd
#读取excel数据
df = pd.read_excel('website.xlsx',index_col='name',skiprows=[2])
#处理未命名列
df.columns = df.columns.str.replace('Unnamed.*', 'col_label')
print(df)

输出结果:
           col_label     rank    language          agelimit
name                                                 
编程帮           0         1        PHP       www.bianchneg.com
微学苑           2         3        PHP       www.weixueyuan.com
92python        3         4        Python    www.92python.com

再看一组示例:

#index_col选择前两列作为索引列
#选择前三列数据,name列作为行索引
df = pd.read_excel('website.xlsx',index_col='name',index_col=[0,1], usecols=[1,2,3])
#处理未命名列,固定用法
df.columns = df.columns.str.replace('Unnamed.*', 'col_label')
print(df)

输出结果:
                   language
name      rank        
编程帮       1          PHP
c语言中文网   2           C
微学苑       3          PHP
92python    4         Python 

to_excel()

通过 to_excel() 函数可以将 Dataframe 中的数据写入到 Excel 文件。

如果想要把单个对象写入 Excel 文件,那么必须指定目标文件名;如果想要写入到多张工作表中,则需要创建一个带有目标文件名的ExcelWriter对象,并通过sheet_name参数依次指定工作表的名称。

to_ecxel() 语法格式如下:

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)  

下表列出函数的常用参数项,如下表所示:

参数名称描述说明
excel_wirter文件路径或者 ExcelWrite 对象。
sheet_name指定要写入数据的工作表名称。
na_rep缺失值的表示形式。
float_format它是一个可选参数,用于格式化浮点数字符串。
columns指要写入的列。
header写出每一列的名称,如果给出的是字符串列表,则表示列的别名。
index表示要写入的索引。
index_label引用索引列的列标签。如果未指定,并且 hearder 和 index 均为为 True,则使用索引名称。如果 DataFrame
使用 MultiIndex,则需要给出一个序列。
startrow初始写入的行位置,默认值0。表示引用左上角的行单元格来储存 DataFrame。
startcol初始写入的列位置,默认值0。表示引用左上角的列单元格来储存 DataFrame。
engine它是一个可选参数,用于指定要使用的引擎,可以是 openpyxl 或 xlsxwriter。

下面看一组简单的示例:

import pandas as pd
#创建DataFrame数据
info_website = pd.DataFrame({'name': ['编程帮', 'c语言中文网', '微学苑', '92python'],
     'rank': [1, 2, 3, 4],
     'language': ['PHP', 'C', 'PHP','Python' ],
     'url': ['www.bianchneg.com', 'c.bianchneg.net', 'www.weixueyuan.com','www.92python.com' ]})
#创建ExcelWrite对象
writer = pd.ExcelWriter('website.xlsx')
info_website.to_excel(writer)
writer.save()

上述代码执行后会自动生成 website.xlsx 文件,文件内容如下:

json文件

read_json()

可以通过下列方法来读取一个 json 文件,如下所示:

import pandas as pd
data = pd.read_json('test.json')
print(data)

输出结果:
       up  down  right  left
white   0     1      2     3
black   4     5      6     7
red     8     9     10    11
blue   12    13     14    15

to_json()

可以通过下列方法来存储一个 json 文件,如下所示:

frame = pd.DataFrame(np.arange(16).reshape(4, 4),
                     index=['white', 'black', 'red', 'blue'],
                     columns=['up', 'down', 'right', 'left'])
print(frame)
frame.to_json('frame.json')
存储结果:
{"up":{"white":0,"black":4,"red":8,"blue":12},"down":{"white":1,"black":5,"red":9,"blue":13},"right":{"white":2,"black":6,"red":10,"blue":14},"left":{"white":3,"black":7,"red":11,"blue":15}}

SQL数据库读取

如果想要从 SQL 数据库读取数据,首先您应该使用 Python 和数据库建立连接,然后将查询语句传递给 read_sql_query() 方法,下面做简单地演示:

1) 安装pysqlite3模块

pip install pysqlite3

2) 建立数据连接

import sqlite3 
con = sqlite3.connect("database.db")  

3) 数据库读取数据

在 SQLite 数据库中创建一张信息表,可以随意添加一些信息,最后使用下列方法读取数据即可:

#con参数指定操作数据库的引擎,可以指定,也可默认
df = pd.read_sql_query("SELECT * FROM information",con)  
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值