Pandas学习(4、数据载入、存储及文件格式

摘要:
您还可以指定一个列号或列名称列表进行解析。)迭代skip_的块大小。页脚忽略文件末尾的行数。verbose打印各种解析器输出的信息,例如编码Unicode文本编码的非数字列中缺少的值的数量。如果解析的数据只包含一列,那么将使用Seriesthousands千位分隔符引擎(重要!)返回。如果是中文,通常,engine='python''''''4.2以块形式读取文本文件。
importpandas as pd
importnumpy as np

'''4.1 文本格式数据的读写'''

'''表:Pandas的解析函数
函数             描述
read_csv        从文件、URL或文件型对象读取分隔好的数据,逗号是默认分隔符
read_table      从文件、URL或文件型对象读取分隔好的数据,制表符('	')是默认分隔符
read_fwf        从特定宽度格式的文件中读取数据(无分隔符)
read_clipboard  read_table的剪贴板版本,在将表格从Web页面上转换成数据时有用
read_excel      从Excel的XLS或XLSX文件中读取表格数据
read_hdf        读取用pandas存储的HDF5文件
read_html       从HTML文件中读取所有表格数据
read_json       从JSON(JavaScript Object Notation)字符串中读取数据
read_msgpack    读取以Python pickle格式存储的任意对象
read_sas        读取存储在SAS系统中定制存储格式的SAS数据集
read_sql        将SQL查询的结果(使用SQLAlchemy)读取为pandas的DataFrame
read_stata      读取Stata格式的数据集
read_feather    读取Feather二进制格式
'''

'''表:一些read_csv/read_table函数参数
参数              描述
path            表名文件系统位置的字符串、URL或文件型对象
sep或delimiter  用于分隔每行字段的字符序列或正则表达式
header          用作列名的行号,默认是0(第一行),如果没有列名的话,应该为None
index_col       用作结果中行索引的列号或列名,可以是一个单一的名称/数字,也可以是一个分层索引
names           结果的列名列表,和header=None一起用
skiprows        从文件开头处起,需要跳过的行数或行号列表
na_values       需要用NA替换的值序列
comment         在行结尾处分隔注释的字符
parse_dates     尝试将数据解析为datetime,默认是False。如果为True,将尝试解析所有的列。也可以指定列号或列名列表来进行解析。
                如果列表的元素是元组或列表,将会把多个列组合在一起进行解析(例如日期/时间将拆分为两列)
keep_date_col   如果连接列到解析日期上,保留被连接的列,默认是False
converters      包含列名称映射到函数的字典(例如{'foo':f}会把函数f应用到'foo'列)
dayfirst        解析非明确日期时按照国际格式处理(例如7/6/2012 ->June 7,2012), 默认为False
date_parser     用于解析日期的函数
nrows           从文件开头处读入的行数
iterator        返回一个TextParser对象,用于零散地读入文件(重要!)
chunksize       用于迭代的块大小
skip_footer     忽略文件尾部的行数
verbose         打印各种解析器输出的信息,比如位于非数值列中的缺失值数量
encoding        Unicode文本编码(例如'utf-8'用于表示UTF-8编码的文本)
squeeze         如果解析数据只包含一列,返回一个Series
thousands       千位分隔符(例如',' 或 '.')
engine          引擎(重要!)如果是中文的话,一般engine='python'
'''

'''4.2 分块读入文本文件'''
'''当处理大型文件或找出正确的参数集来正确处理大文件时,可能需要读入文件的一个小片段或者按小块遍历文件。
在尝试大文件之前,我们可以先对pandas的显示设置进行调整,使之更为紧凑:'''
#pd.options.display.max_rows = 10 #即只显式10行

'''如果只想读取一小部分行(避免读取整个文件),可以指明nrows:'''
#print(pd.read_csv(r'D:My_DATA酬金公客行销、合作、商圈、外包厅酬金(1-3月).csv', engine='python', nrows=5))

'''为了分块读入文件,可以指定chunksize作为每一块的行数:'''
#chunker = pd.read_csv(r'D:My_DATA酬金公客行销、合作、商圈、外包厅酬金(1-3月).csv', engine='python', chunksize=1000)

'''read_csv返回的TextParser对象允许你根据chunksize遍历文件。例如,这里可以遍历上述酬金清单,并对'渠道名称'列聚合获得计数值'''
#tot = pd.Series([])#for piece in chunker:#tot = tot.add(piece['渠道名称'].value_counts(), fill_value=0)#tot = tot.sort_values(ascending=False)#print(tot)

'''TextParser还具有get_chunk方法,允许你按照任意大小读取数据块'''
#data = pd.read_csv(r'D:My_DATA酬金公客行销、合作、商圈、外包厅酬金(1-3月).csv', engine='python', iterator=True)#print(data.get_chunk(10))

'''4.3 将数据写入文本格式'''
#data = pd.read_csv(r"C:UsersAdministratorDesktop报表数据cdma.xls", engine='python', sep='	')#print(data.columns)

'''使用DataFrame的to_csv方法,可以将数据导出为逗号分隔的文件:'''
#data.to_csv(r'C:UsersAdministratorDesktopcdma.csv', encoding='gbk')

'''其他的分隔符也可以,比如'|' '''
#data.to_csv(r'C:UsersAdministratorDesktopcdma.csv', encoding='gbk', sep='|')

'''缺失值在输出时以空字符串出现,如果想要用其他标识值对缺失值进行标注:'''
#data.to_csv(r'C:UsersAdministratorDesktopcdma.csv', encoding='gbk', na_rep='NULL')

'''如果没有其他选项被指定的话,行和列的标签都会被写入,不过二者也可以被禁止(一般index=False就够了)'''
#data.to_csv(r'C:UsersAdministratorDesktopcdma.csv', encoding='gbk', index=False, header=False)

'''也可以仅写入列的子集,而且按照你选择的顺序写入:'''
#data.to_csv(r'C:UsersAdministratorDesktopcdma.csv', encoding='gbk', index=False,#columns=['统计日期', '发展部门名称', '渠道管理细分', '用户标识', '套餐名称', '销售区局'])


'''4.4 使用分隔格式'''
'''有些表格的行会出现问题,用read_csv和read_table都无法解决,比如下例'''
#data = pd.read_table(r'C:UsersAdministratorDesktop	est.csv')#print(data)
'''这里获得的结果中,每个元素还带有双引号,这是需要去除的
   a,"b","c"
0  1,"2","3"
1  1,"2","3"'''

'''对于任何带有单字符分隔符的文件,可以使用Python的内建csv模块'''
importcsv
#f = open(r'C:UsersAdministratorDesktop	est.csv')#reader = csv.reader(f)
'''像遍历文件那样遍历reader会产生元组,元组的值为删除了引号的字符:'''
#for line in reader:#print(line)
'''['a', 'b', 'c']
['1', '2', '3']
['1', '2', '3']'''

'''接下来就可以做一些必要处理,以数据整理为你需要的形式。首先将文件读取为行的列表:'''
#with open(r'C:UsersAdministratorDesktop	est.csv') as f:#lines = list(csv.reader(f))
'''然后,将数据拆分为列名行和数据行:'''
#header, values = lines[0], lines[1:]
'''再然后,使用字典推导式和表达式zip(*values)生成一个包含数据列的字典,字典中行转置成列:'''
#data_dict = {h: v for h, v in zip(header, zip(*values))}#print(data_dict)
'''{'a': ('1', '1'), 'b': ('2', '2'), 'c': ('3', '3')}'''

'''csv文件有多种不同风格。如需根据不同的分隔符、字符串引用约定或行终止符定义一种新的格式时,我们可以使用csv.Dialect定义一个简单的子类:'''
classmy_dialect(csv.Dialect):
    lineterminator = ''delimiter = ','quotechar = '"'quoting =csv.QUOTE_MINIMAL

#reader = csv.reader(f, dialect=my_dialect)
'''也可以不必定义子类,直接将csv方言参数传入csv.reader的关键字参数:'''
#reader = csv.reader(f, delimiter='|')

'''表:csv方言选项
参数            描述
delimiter       一个用于分隔字段的字符,默认是','
lineterminator  行终止符,默认是'
', 读取器会忽略行终止符并识别跨平台行终止符
quotechar       用在含有特殊字符字段中的引号,默认是' " '
quoting         引用惯例。选项包括csv.QUOTE_ALL(引用所有的字段), csv.QUOTE_MINIMAL(默认,只使用特殊字符,如分隔符),
                csv.QUOTE_NONNUMERIC和csv.QUOTE_NONE(不引用)
skipinitialspace 忽略每个分隔符后的空白,默认是False
doublequote     如何处理字段内部的引号。如果为True,则是双引号
escapechar      当引用设置为csv.QUOTE_NONE时用于转义分隔符的字符串,默认是禁用的
'''

'''注:对于具有更复杂或固定的多字符分隔符的文件,你将无法使用csv模块。
在此类情况下,你将不得不使用字符串的split方法或正则表达式方法re.split进行行拆分和其他清理工作。'''

'''需要手动写入被分隔的文件时,你可以使用csv.writer。这个函数接收一个已经打开的可写入文件对象以及和csv.reader相同的csv方言、格式选项:'''
#with open('mydata.csv', 'w') as f:#writer = csv.writer(f, dialect=my_dialect)#writer.writerow(('one', 'two', 'three'))#writer.writerow(('1', '2', '3'))#writer.writerow(('4', '5', '6'))#writer.writerow(('7', '8', '9'))


'''4.5 JSON数据'''
'''JSON(JaveScript Object Notation的简写)已经成为Web浏览器和其他应用间通过HTTP请求发送数据的标准格式。它是一种比CSV等表格文本形式更为自由的数据形式。'''obj = """{"name": "Wes",
 "places_lived": ["United States", "Spain", "Germany"],
 "pet": null,
 "siblings": [{"name": "Scott", "age": 30, "pets": ["Zeus", "Zuko"]},
              {"name": "Katie", "age": 38,
               "pets": ["Sixes", "Stache", "Cisco"]}]
}
"""
'''JSON非常接近有效的Python代码,除了它的空值null和一些其他的细微差别(例如不允许列表末尾的逗号)之外。基本类型是对象(字典)、数组(列表)、字符串、数字、布尔值和空值。对象中的所有键都必须是字符串。有几个Python库用于读写JSON数据。我将在这里使用json,因为它是内置在Python标准库中的。将JSON字符串转换为Python形式时,使用json.loads方法:'''
importjson
#result = json.loads(obj)#print(result)
'''另一方面,json.dumps可以将Python对象转换回JSON:'''
#asjson = json.dumps(result)#print(asjson)
'''你将自行决定如何将JSON对象或对象列表转换为DataFrame或其他数据结构。比如方便的方式是将字典构成的列表(之前是JSON对象)传入DataFrame构造函数,并选出数据字段的子集:'''
#siblings = pd.DataFrame(result['siblings'], columns=['name', 'age'])#print(siblings)
'''pandas.read_json可以自动将JSON数据集按照指定次序转换为Series或DataFrame。
pandas.read_json的默认选项是假设JSON数组中的每个对象是表里的一行:'''
#data = pd.read_json('examples/example.json')
'''如果需要从pandas中将数据导出为JSON,可以使用to_json方法:'''
#print(siblings.to_json())#{"name":{"0":"Scott","1":"Katie"},"age":{"0":30,"1":38}}#print(siblings.to_json(orient='records'))#[{"name":"Scott","age":30},{"name":"Katie","age":38}]


'''4.6 读取Excel文件'''
'''pandas也支持通过ExcelFile或pandas.read_excel函数来读取存储在Excel2003(或更高版本)文件中的表格型数据。
这些工具内部是使用附加包xlrd和openpyxl来分别读取XLS和XLSX文件的。所以使用前需要先安装这两个包'''

'''使用ExcelFile时,通过将xls或xlsx的路径传入,生成一个实例:'''
#xlsx = pd.ExcelFile(r"C:UsersAdministratorDesktop报表数据数据说明与匹配公式.xlsx")
'''存储在表中的数据可以通过pandas.read_excel读取到DataFrame中:'''
#print(pd.read_excel(xlsx, '部门匹配表'))

'''如果读取的是含有多个表的文件,生成ExcelFile更快,但也可以更简洁地将文件名传入pandas.read_excel(推荐这种):'''
#frame = pd.read_excel(r"C:UsersAdministratorDesktop报表数据数据说明与匹配公式.xlsx", '部门匹配表')#print(frame)

'''如需将pandas数据写入到Excel格式中,你必须先生成一个ExcelWriter,然后使用pandas对象的to_excel方法将数据写入:'''
#writer = pd.ExcelWriter(r"C:UsersAdministratorDesktopex2.xlsx")#frame.to_excel(writer, '部门匹配表', index=False)#writer.save()

'''也可以将文件路径传给to_excel,避免直接调用ExcelWriter'''
#frame.to_excel(r"C:UsersAdministratorDesktopex2.xlsx", index=False)

'''4.7 与数据库交互'''
'''当从数据库的表中选择数据时,pymysql返回的是元组'''
importpymysql
#db = pymysql.connect(host='localhost', user='root', password='', port=3306, db='cyber')#cur = db.cursor() #使用cursor()方法获取操作游标#sql = 'select * from 部门匹配表'#cur.execute(sql) # 执行sql语句#data = list(cur.fetchall()) #如果只取第一条用cur.fetchone()#print(data) #获取查询的记录

'''可以将元组的列表传给DataFrame构造函数,但还需要包含在游标的description属性中的列名:'''
#print(cur.description)
'''(('合并', 253, None, 1020, 1020, 0, False), ('发展部门名称', 253, None, 1020, 1020, 0, True), ('渠道管理细分', 253, None, 1020, 1020, 0, True), ('所属部门', 253, None, 1020, 1020, 0, True), ('所属分局', 253, None, 1020, 1020, 0, True), ('所属代理商', 253, None, 1020, 1020, 0, True))
'''
#columns = [x[0] for x in cur.description]#print(columns) #['合并', '发展部门名称', '渠道管理细分', '所属部门', '所属分局', '所属代理商']#print(pd.DataFrame(data, columns=[x[0] for x in cur.description]))

'''SQLAlchemy项目是一个流行的Python SQL工具包,抽象去除了SQL数据库之间的许多常见差异。pandas有一个read_sql函数允许你从通用的SQLAlchemy连接中轻松地读取数据
sqla.create_engine(mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>])'''
importsqlalchemy as sqla
db = sqla.create_engine('mysql+pymysql://root:@localhost/cyber')
print(pd.read_sql('select * from 部门匹配表', db))

参考于:https://blog.csdn.net/weixin_42029733/article/details/89381807

免责声明:文章转载自《Pandas学习(4、数据载入、存储及文件格式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SCI正刊和特刊(专刊/增刊)的区别是什么?FlexCell图片显示问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

应用开发框架之——数据字典、原数据、模板

对象根据原数据动态生成,改变原数据,根据原数据动态生成的对象的属性也随之改变。 可以把原数据保存在数据表中,或者文件中。软件系统运行的时候读取这些原数据,然后动态地生成一些对象。 在管理软件里面,我们习惯性地叫数据字典。为此会专门设计一个数据字典的数据表来保存原数据。通过软件设置改变就是数据字典数据表里面的原数据。 模板,大概是c++的叫法。无论怎样,数据...

如何在eclipse开发环境中连接数据库?oracle和db2

1、使用连接工具:eclipse-》window-》open perspective-》myeclipse database explorer 2、下图是oracle连接driver设置,需要添加两个jar包,分别是oracle.jar和ojdbc14.jar 3、下图是db2连接driver设置,需要添加两个jar包,分别是db2jcc.jar和db2...

阿里云常用产品汇总及解释-copy

1. 场景描述 最近博客更新的少,跟朋友一起做些事情,最近主要给朋友做些售前工作,阿里云的产品线是真多,好多英文缩写,需要做沟通,系统汇总了一下,记录下,有需要的朋友拿走不谢。 2. 解决方案 从下面这个架构图开始吧: 2.1 云数据库 RDS 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的...

zabbix主动模式无法获取网卡和文件系统数据

zabbix版本为4.2,根据网上教程将zabbixagent设置成主动模式后,将templates中各Items的type改为Zabbix agent (active),同时将Discovery rules中网卡及文件系统相关的两个rules的Type改成了Zabbix agent (active)。结果是CPU内存等数据都有,就是没有网卡和各分区目录的...

数据批量导入HBase

测试数据: datas 1001 lilei 17 13800001111 1002 lily 16 13800001112 1003 lucy 16 13800001113 1004 meimei 16 13800001114 数据批量导入使用mr,先生成HFile文件然后在用completebu...

Elasticsearch-索引新数据(创建索引、添加数据)

ES-索引新数据 0.通过mapping映射新建索引 CURL -XPOST 'localhost:9200/test/index?pretty' -d '{ "mappings": { "docs": { "_source": { "excludes": [ "query_content"...