建议先阅读我之前的Python数据处理以及Python专栏中的博客,掌握一定的Python前置知识后再阅读本文,链接如下:
在Pandas中,可以使用pandas.read_csv(filepath_or_buffer,sep=',',usecols,index_col)方法读取CSV文件。
该方法中,参数filepath_or_buffer用于表示需要读取的文件路径。
参数sep用于指定读取CSV文件的分隔符,默认使用','隔开CSV文件中的各条数据。
参数usecols用于指定读取的列名,需要以列表的形式传入。
参数index_col用于重新指定索引列,需要以列表的形式传入新索引列的列下标,注意:使用该参数不会改变第一行的列名的顺序。
注意:使用read_csv方法后会返回一个新的DataFrame对象。
在Pandas中,可以使用DataFrame.to_csv(path_or_buf=None, sep=',’,columns=None, header=True,index=True,mode='w',encoding=None)方法将DataFrame对象存为CSV文件。
该方法中,参数path_or_buf用于表示存储文件的路径。
参数sep用于指定存储CSV文件时使用的分隔符,默认用","分隔。
参数columns用于指定选择需要存储的列名,需要以列表的形式传入。
参数header用于指定是否需要存储第一行的列名,默认为True,如果指定该参数为False则不会存储原数据中的第一行即列名,会将原数据中的第一行数据作为新的第一行,即作为新的列名。
参数index用于指定是否需要写进第一列的行索引,默认为True,如果指定该参数为False则不会存储原数据中的行索引列。
参数mode用于指定存入CSV文件的具体模式,'w'模式表示对目标文件进行重写,即不保留目标文件中的原始内容,'a'模式对目标文件进行追加,即保留目标文件中的原始内容。
本小节以与MySQL数据库的交互为例。
使用to_sql方法前,需要创建数据库连接引擎对象并指定数据库,具体代码如下:
# 需要安装pymysql,部分版本需要额外安装sqlalchemy
# 导入sqlalchemy的数据库引擎
from sqlalchemy import create_engine
# 创建数据库引擎,传入uri规则的字符串
uri = 'mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8'
engine = create_engine(uri)
'''
传入的字符串的解释如下:
mysql 表示数据库类型
pymysql 表示python操作数据库的包
root:123456 表示数据库的账号和密码,两者之间用冒号连接
127.0.0.1:3306/test 表示数据库的ip和端口号,两者之间用冒号连接
3306为MySQL数据库的默认端口号,test为数据库名,与端口号之间使用/连接
charset=utf8 用于规定编码格式
'''
创建数据库操作引擎对象后,即可借助该对象将数据写入MySQL数据库,具体代码如下:
# 使用df.to_sql()方法将df对象中的数据快速写入数据库
df.to_sql('test_pdtosql', engine, index=False, if_exists='append')
# 第一个参数用于指定存入数据库的表名
# 第二个参数用于指定engine为数据库连接引擎
# 参数index用于控制是否将df对象的索引列写入到SQL表中,默认值为True
# if_exists参数用于控制当目标表已经存在时的行为
# if_exists='append' 表示如果表存在就添加,表不存在就创建表并写入
# if_exists='fail'表示如果表已经存在,则抛出 ValueError 异常
# if_exists='replace'表示如果表已经存在,则先删除该表,然后再创建新表并写入数据。
使用read_sql方法前同样需要需要创建数据库连接引擎对象,具体代码如下:
from sqlalchemy import create_engine
uri = 'mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8'
engine = create_engine(uri)
# 读取数据时可以使用以下两种方法
# 在第一个参数的位置指定表名,第二个参数传入数据库连接引擎对象
pd.read_sql('test_pdtosql', engine)
# 在第一个参数的位置传入sql语句,第二个参数传入数据库连接引擎对象
pd.read_sql('select * from test_pdtosql', engine)
注意:使用read_sql方法后会返回一个新的DataFrame对象。
在Pandas中,可以使用pandas.read_json(path_or_buf=None,orient=None,typ='frame', lines=False)方法读取JSON文件。
该方法中,参数path_or_buf用于表示需要读取的文件路径。
参数orient表示需要读取的JSON文件中JSON字符串的格式,可以传入如下参数:
'split':使用字典套列表的格式,将索引归结到索引,列名归结到列名,数据归结到数据,把三部分都分开了,所期望传入的JSON字符串格式如下:
{
"columns": ["col1", "col2"],
"index": [0, 1],
"data": [[value1, value2], [value3, value4]]
}
'records':使用列表套字典的格式,列表的每个元素表示一行数据,该格式不包含索引信息,所期望传入的JSON字符串格式如下:
[
{"col1": value1, "col2": value2},
{"col1": value3, "col2": value4}
]
注意:使用'records'格式时,可以将每条记录对应的字典放在一个列表中,也可以将每个字典单独放在JSON文件的一行中,并指定参数lines=True,lines参数用于指定是否按照每行读取JSON文件,默认为False。
'index':使用字典套字典的格式,键值为索引值,字典中每个元素表示一行数据,所期望传入的JSON字符串格式如下:
{
"0": {"col1": value1, "col2": value2},
"1": {"col1": value3, "col2": value4}
}
'columns':类似'index',也是使用字典套字典的格式,但键值为列名,字典中每个元素表示一列数据,所期望传入的JSON字符串格式如下:
{
"col1": {"0": value1, "1": value3},
"col2": {"0": value2, "1": value4}
}
'values':使用列表套列表的格式,该格式不包含列名和索引信息,仅包含值,所期望传入的JSON字符串格式如下:
[[value1, value2], [value3, value4]]
参数typ用于指定将JSON文件的内容转换成Series对象或者DataFrame对象,默认值为 ‘frame’,表示转换为DataFrame对象,如果传入'series'则表示转换为Series对象。
注意:使用read_json方法后会返回一个新的DataFrame对象。
在Pandas中,可以使用DataFrame.to_json(path_or_buf=None,orient=None,lines=False)方法将DataFrame对象存储为JSON文件格式。
该方法中,参数path_or_buf用于表示存储文件的路径。
参数orient表示存储JSON文件中JSON字符串的格式,常用的格式有'split'、'records'、'index'、'columns'、'values'等格式,具体细节与上一小节介绍的格式一致。
注意:参数lines可以与'records'格式一同使用,将lines参数设置为True可以省去'records'格式最外层的列表,将DataFrame对象存储为按行分隔的一个个字典。
因篇幅问题不能全部显示,请点此查看更多更全内容