最近做了一个实验,实验得到的结果是一个个的表格,我们需要通过表格做一个topn,然后进行分析。
首选我们先阐述一下我们做topn的基本过程:
概况:我们总共词向量个数为4个,神经网络模型是5个,一共有20种组合,对于每种组合我们做5遍,对于每一种组合的每一遍我们都会经过test.py文件获得三个表格,分别是
[str(number)+“prob”+model_name+"_id.csv",str(number)+“prob”+model_name+"_label.csv",str(number)+“prob”+model_name+"_data_no_weight.csv"]
合计一共会产生:455*3 = 300 个表格
我们对于产生的每3个文件可以做一个topn的统计,所以要做100张表
数量还是不小的,所以我们想着用代码实现做topn的工作
代码实现:
所以代码和上面相比无过多的变化,只不过是在主函数中多套两层循环,从而遍历词向量和神将网络的每一种组合
python的包xlwt和xlsxwriter都是比较方便创建excel文件并写入数的。
工具:python3.0+
首先,需要安装好相应的包。pip install xlwt 或pip install xlsxwriter
xlwt中:
通过xlwt.Workbook()来新建工作簿;
通过.add_sheet(“Sheet名”)来新建sheet;
通过.write(行号,列号,值)来一个单元格一个单元格地写入数据,注意,行号和列号均从0开始;
最后,通过.save(‘文件名’)来保存。
xlsxwriter中:
通过xlsxwriter.Workbook(‘新建的文件名’)来新建工作簿;
通过.add_worksheet()来新建sheet;
通过.write(行号,列号,值)来一个单元格一个单元格地写入数据,注意,行号和列号均从0开始;
最后,通过.close()来保存。
Pandas中处理Csv和Excel数据详解
典型的处理是read_csv,read_excel,to_csv,to_excel前两个是读取csv和xls文件形成对象,后两者对与读出的对象转转化为csv和xls文件。我我们读取文件后的对象可以被修改某个单元格的值,修改某行或某列的元素,但是必须要to_csv,to_xls方法到相同位置也就是打开的文件,这样我们修改才会生效,我们打开我们要修改的文件,就可以发现我我们对表格文件进行操作(pandas读取csv文件数据的方法及注意点)
Pandas读取与导出Excel、CSV文件
在使用Pandas处理数据时,常见的读取数据的方式时从Excel或CSV文件中获取,另外有时也会需要将处理完的数据输出为Excel或CSV文件。今天就一起来学习下Pandas常见的文件读取与导出的方法。在Pandas中,并且读取得到的是一种Dframe的对象。
Excel文件读取
方法是:pd.read_excel()。具体可传参数为:
其中:
io:excel文件,可以是文件路径、文件网址、file-like对象、xlrd workbook
sheetname:返回指定的sheet,参数可以是字符串(sheet名)、整型(sheet索引)、list(元素为字符串和整型,返回字{‘key’:’sheet’})、none(返回字典,全部sheet)
header:指定数据表的表头,参数可以是int、list of ints,即为索引行数为表头
names:返回指定name的列,参数为array-like对象。
index_col:设定索引的列,参数可以是int、list of ints
usecol:设定需要解析的列,默认为None,代表解析素有,如果直传一个int,代表解析到最后的那个列,如果传的是list则返回的是限定的列,比如:“A:E”或“A,C,E:F”
squeeze:如果解析的数据只包含一列数据,则返回一个Series,默认返回为Dataframe
dtype:可以制定每列的类型,示例:{‘a’: np.float64, ‘b’: np.int32}
engine:如果 io 不是缓冲区或路径,则必须设置 io。 可接受的值是 None 或 xlrd
converters:自定形式,设定对应的列要用的转换函数。
true_values:设定安歇为True值,不常用
false_values:设定哪些为False值,不常用
shiprows:需要跳过的行,list-like类型
nrows:要分析的行数
na_values:N/A值列表
parse_dates:传入的是list,将指定的类解析为date格式
date_parser:指定将输入的字符串转换为可变的时间数据。Pandas默认的数据读取格式是‘YYYY-MM-DD HH:MM:SS’。如需要读取的数据没有默认的格式,就要人工定义。
thousands:千位分格数字的解析
comment:设定注释标识,在注释内的内容不解析
skipfooter:跳过末尾行
convert_float:将小数位为0的float类型转为int
**kwds:不清楚
该函数返回pandas中的Dataframe或dict of Dataframe对象,利用Dataframe的相关操作即可读取相应的数据。
该函数主要的参数为io、sheetname、header、names、encoding。encoding在上面的参数说明中没有介绍到,其主要功能是指定用何种编码(codecs 包中的标准字符集)读取数据。
例如读取文件时报如下错误:
解决办法为设置encoding=”utf_8_sig” 或 encoding=”cp500″ 或 encoding=”gbk”,需要自行进行尝试。
加载CSV文件
在Pandas中,Excel文件读取方法是:pd.read_csv()。具体可传参数为:
与read_excel不同的参数有:
filepath_or_buffer:这里可以接受一个文件名,或者一个URL,也可以接受一个打开的文件句柄,或者其他任何提供了read方法的对象。
sep和delimiter:这两个参数是一个意思,delimiter是sep的别名;如果指定为 (制表符)的话,就可以实现read_table的默认功能;支持使用正则表达式来匹配某些不标准的CSV文件
mangle_dupe_cols:将冲虚的列X,指定为1,X.2,…
skipinitialspace:在分隔符后跳过空格。
keep_default_na:在解析数据时是否要包含默认的 NaN 值。
na_filter:检测丢失的值标记(空字符串和 na 值的值)。 在没有 NAs 的数据中,通过过滤器 False 可以提高读取大文件的性能
verbose:指示放置在非数字列中的 NA 值的数目
skip_blank_lines:如果是真的,跳过空白行,而不是将其解释为 NaN 值。
infer_datetime_format:如果启用 True 和 parse_dates,Pandas将尝试推断列中的差异的时间字符串的格式,如果可以推断出来,则切换到更快的分析方法。 在某些情况下,这可以使解析速度提高5-10倍。
keep_date_col:解析出日期序列后,是否保留原来的列
dayfirst:日期格式,DD/MM哪个在前
iterator:返回 TextFileReader 对象用于迭代或 get chunk ()。
chunksize:返回 TextFileReader 对象进行迭代。 有关iterator和chunksize的更多信息,请参见 IO 工具文档。
compression:用于磁盘数据的实时解压
decimal:识别有小数点的字符
lineterminator:字符将文件分隔程行,只有C解析器才有效
quotechar:用于表示引用项的开始和结束的字符。 引用的项可以包括分隔符,它将被忽略。
quoting:控制字段引用行为
escapechar:跳过的字符?
dialect:如果提供了这个参数,这个参数将覆盖以下参数的值(默认或不是) : 分隔符、双引号、 escapechar、 skipinitialspace、 quotechar 和引号。 如果需要重写值,将发布一个 ParserWarning。 详情请参阅 csv 方言文档。
tupleize_cols:在列上留下一个元组列表(默认情况是在列上转换为多索引)
error_bad_lines:有太多字段的行(例如 csv 行,有太多逗号)将默认引发异常,并且不会返回 Dataframe。 如果错误,那么这些”bad lines”将从返回的 Dataframe 中删除。
warn_bad_lines:如果错误错误行为是 False,并警告错误行是 True,那么对于每个”坏行”的警告将是输出。
doublequote:指定 quotechar 时,引用不是QUOTE_NONE,指示是否将两个连续的 quotechar 元素解释为一个单独的 quotechar 元素。
delim_whitespace:设定是否使用空白做字段区隔
low_memory:内部处理文件的块,导致较低的内存使用同时分析,但可能混合类型推理。 为了确保没有混合类型设置 False,或指定具有 dtype 参数的类型。 请注意,整个文件被读入一个单一的 Dataframe,使用 chunksize 或 iterator 参数将数据以块的形式返回。 (只有 c 解析器有效)
memory_map:如果为文件或缓冲区提供一个文件程序,将文件对象直接映射到内存中,并直接从内存访问数据。 使用此选项可以提高性能,因为不再有任何 i / o 开销。
float_precision:指定 c 引擎应用于浮点值的转换器。
加载CSV文件的方法同加载Excel类似。但是从性能上导入csv要比导入Excel快很多,收益推荐使用csv导入。但是如果 导入的csv的格式存在一些问题,则可能出现错行的问题。
另外,除了导入CSV、Excel外,Pandas还支持如下方式导入:
read_sql(query, connection_object):从SQL表/库导入数据
read_json(json_string):从JSON格式的字符串导入数据
Dataframe(dict):从字典对象导入数据,Key是列名,Value是数据
read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格
read_clipboard():从你的粘贴板获取内容,并传给read_table()
read_table(filename):从限定分隔符的文本文件导入数据
这里有必要重点学习的是pd.read_sql(query, connection_object),规划将在后面的学习中分享。
导出到Excel文件
导出到Excel的方法非常的简单:
具体导出方法还有众多参数:
参数含义为:
excel_writer:写入的目标excel文件,可以是文件路径、ExcelWriter对象;
sheet_name:被写入的sheet名称,string类型,默认为’sheet1′;
na_rep:缺失值表示,string类型;
float_format:浮点数的格式
columns:要写入的列
header:是否写表头信息,布尔或list of string类型,默认为True;
index:是否写行号,布尔类型,默认为True;
index_label:索引标签
startrow:开始行,其余会被舍弃
startcol:开始列,其余会被舍弃
engine:写入的引擎,可以是:excel.xlsx.writer, io.excel.xls.writer, io.excel.xlsm.writer
merge_cells:合并单元格配置
encoding:指定写入编码,string类型。
inf_rep:指定数学符号无穷在Excel的表示
verbose:未知
freeze_panes:冻结窗格
导出到CSV文件
导出方法同Excel类型,具体方法参数为:
具体参数含义为(与“导入CSV文件”、“导出为Excel文件”重复的内容不再单独说明):
path_or_buf:写入的文件名或文件路径
mode:写入文件的模式,默认为w,改为a为追加。
date_format:时间格式设定
Pandas还支持的导出方式有:
to_sql(table_name, connection_object):导出数据到SQL表
to_json(filename):以Json格式导出数据到文本文件
df.to_sql将在后面的学习中再做分享。
追加列
现在我们已经学会了如何从文件中读取数据并转化为对象的形式,并且把我们改变好的对象,再转化为表格文件,所以如何对我们的对象进行操作就变得至关重要。我们做topn的时候是把三个表格文件中的每一类都添加到我我们的topn文件当中,但是再网上并未寻求到明确的答案,我从文章中下列代码得到启发,并且改篇文章也提到了追加行的写法
追加行
同为excel文件
同为csv文件
法一:
EXCEL的数值排序功能还是挺强大的,升序、降序,尤其自定义排序,能够对多个字段进行排序工作。
那么,在Python大法中,有没有这样强大的排序功能呢?答案是有的,而且本人觉得Python的排序功能,一点不比EXCEL的差。
同样,我们依然用到的是强大的pandas这个三方库。我们先将numpy和pandas导入进来:
假如我有这样一个需求:先按照身高降序排序,若存在相同的身高,则再按照武力来降序排序,可以做到吗?
当然可以,我们只需要在by参数里传入列标签组成的列表即可。
关于sort_values这个强大的排序函数就介绍到这了。除了这些参数之外,它还有inplace、kind和na_position等参数来应对不同的排序需求。可以参考官网文档进行学习
法2
excel表数据如下
1、商品单价按降序排列
会用到pandas中的排序方法sort_values(),表示根据某一列排序。
表示pd按照A这个字段排序,inplace默认为False,如果该值为True,那么就会在当前的dataframe上操作。
ascending 默认等于True,按从小到大排列,改为False 按从大到小排。
双重排序的话就要在by后边借一个list
这样确定按照 是否值得排序的,但是单价没有按照降序的要求来排列。可以这样给ascending也加一个list 值得=True 单价=False,这样就得到了想要的数据。
最近在用包xlrd读取excel表格内容,自然就用到了open_workbook方法,先将其具体用法详解如下(注释已经写的很详细了),直接上代码如下:
wb = xlrd.open_workbook(“file.xls”) #打开Excel文件
sheet = wb.sheet_by_name(“Sheet1”) #通过sheet名字获取工作sheet
sheet = wb.sheet_by_index(0) #通过索引号获取工作表sheet,从0开始
ncols=sheet.ncols #获取工作表中列数
nrows=sheet.nrows #获取工作表行数
raw_i=sheet.row_values(i):#获取工作表中某一行的值,结果为列表形式。从0开始:0–第一行
col_i=sheet.col_values(i):#获取工作表中某一列的值,结果为列表形式。从0开始:0–第一列
for i in range(ncols): #获取全部列的值(行亦如此)
print(sheet.col_values(i))
cell_value=sheet.cell(行,列).value #获取单元格的值
cell_value=sheet.row(i)[j].value #获取工作表中(i+1行,j+1列)的值
python将列表数据写入已有的excel文件的指定单元格
第一种方法要用到xlwt、xlutils、xlrd三个第三方库。
需要注意的是,第一种方法操作的是97-2003版的excel文件,也就是后缀名是xls的,如果操作的是xlsx文件,则会出错。
第二种方法要用到openpyxl库。
原excel文件内容如下:
显然,第二种方法比第一种方法要方便得多。第二种方法对xlsx文件也是可以处理的。需要注意的是,sh.cell(i+1,3,a[i-1])这一行代码当中,索引号和实际工作表中的索引号是一样的,也就是说cell(1,2)就表示实际第1行第2列的单元格。
对与xls文件还可以采用下面方法:
写入多个sheet
多个数据需要写入多个excel的工作簿,这时需要调用通过ExcelWriter()方法打开一个已经存在的excel表格作为writer,然后通过to_excel()方法将需要保存的数据逐个写入excel,最后关闭writer。
示例代码如下:
Python模块xlwt对excel进行特别的写入操作
Python 读写excel、csv文件的操作办法
1、excel 写入
2、excel读取
3、写入csv
4、读取csv
链接:https://www.jianshu.com/p/61d41c27e76b