精华内容
下载资源
问答
  • 使用pandas把某一的字符值转换为数字的实例
    千次阅读
    2020-12-22 18:21:10

    使用pandas把某一列的字符值转换为数字的实例

    今天小编就为大家分享一篇使用pandas把某一列的字符值转换为数字的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    使用map的方法就可以实现把某一列的字符类型的值转换为数字。

    class_mapping = {'A':0, 'B':1}

    data[class] = data[class].map(class_mapping)

    首先定义一个字典,然后使用map方法就可以把某一列的字符类型的值转换为数字。

    以上就是对使用pandas把某一列的字符值转换为数字的认识。

    这篇使用pandas把某一列的字符值转换为数字的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

    时间: 2019-01-29

    摘要:本文主要是讲解怎么样替换某一列的一个值. 应用场景: 假如我们有以下的数据集: 我们想把里面不是pre的字符串全部换成Nonpre,我们要怎么做呢? 做法很简单. df['col2']=df['col1'] df.loc[df['col1'] !=' pre','col2']=Nonpre 以上这篇python pandas 如何替换某列的一个值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

    在进行python数据分析的时候,首先要进行数据预处理. 有时候不得不处理一些非数值类别的数据,嗯, 今天要说的就是面对这些数据该如何处理. 目前了解到的大概有三种方法: 1,通过LabelEncoder来进行快速的转换: 2,通过mapping方式,将类别映射为数值.不过这种方法适用范围有限: 3,通过get_dummies方法来转换. import pandas as pd from io

    更多相关内容
  • 09-19推荐内容点击登录举例子,列数字,作比较,打比方,这几个说明方法的例句来自 Clarence 的提问最佳答案由提问者推荐常见的说明方法有举事例、分类别、列数据、作比较、画图表、下定义、作诠释、打比方、摹状貌...

    举例子,列数字,作比较,打比方,这几个说明方法的例句

    2018-09-19

    推荐内容

    点击登录

    举例子,列数字,作比较,打比方,这几个说明方法的例句

    来自 Clarence 的提问

    最佳答案

    由提问者推荐

    常见的说明方法有举事例、分类别、列数据、作比较、画图表、下定义、作诠释、打比方、摹状貌、引资料等10种。写说明文要根据说明对象的特点及写作目的,选用最佳方法。下面分别加以说明。

    (1)举例子。举出实际事例来说明事物,使所要说明的事物具体化,以便读者理解,这种说明方法叫举例法。如:

    一般人总以为,年龄稍大,记忆能力就一定要差,其实不然,请看实验结果:国际语言学会曾对9至18岁的青年与35岁以上的成年人学习世界语作过一个比较,发现前者就不如后者的记忆力好。这是因为成年人的知识、经验比较丰富,容易在已有的知识基础上,建立广泛的联系。这种联系,心理学上称为“联想”。人的记忆就是以联想为基础的,知识经验越丰富,越容易建立联想,记忆力就会相应提高。马克思五十多岁时开始学俄文,六个月后,他就能津津有味地阅读著名诗人与作家普希金、果戈里和谢德林等人的原文著作了。这是由于语言知识丰富,能够通晓很多现代和古代的语言的缘故。

    这段文章要说明的是:年龄稍大,记忆力不一定就差。为了说明这一点,作者先提供了实验结果,又分析了原因。到此为止,未尝不可,但不够具体,也缺乏说服力,于是,又举出了一个实例:马克思在五十多岁的时候,只用六个月时间便精通了俄语。这样一来,内容具体了,说服力增强了。

    说明文中的举事例的说明方法和议论文中的例证法,都可以起到使内容具体、加强说服力的作用。但二者又有区别。议论文中的事例,是用来证明观点的,说明文的事例,是用来介绍知识的。

    运用举事例的说明方法说明事物或事理,一要注意例子的代表性,二要注意例子的适量性。

    (2)分类别。将被说明的对象,按照一定的标准划分成不同的类别,一类一类地加以说明,这种说明方法,叫分类别。

    分类别是将复杂的事物说清楚的重要方法。

    运用分类别方法要注意分类的标准,一次分类只能用同一个标准,以免产生重叠交叉的现象。例如:“图书馆的藏书有中国的、古典的、外国的、科技的、文学的、现代的以及政治经济方面的等。”这里用了不只一个标准,所以表达不清。正确的说法应该是:

    图书馆的藏书,按国别分,有中国的、外国的;按时代分,有古典的、现代的;按性质分,有科技的、文学的以及政治经济方面的等。

    这样,每次分类只用一个标准,就眉目清楚了。

    有的事物的特征、本质需要分成几点或几个方面来说,也属于分类别。

    注意,运用分类别方法,所列举的种类不能有遗漏。

    (3)列数据。为了使所要说明的事物具体化,还可以采用列数据的方法,以便读者理解。需要注意的是,引用的数字,一定要准确无误,不准确的数字绝对不能用,即使是估计的数字,也要有可靠的根据,并力求近似。

    (4)作比较。说明某些抽象的或者是人们比较陌生的事物,可以用具体的或者大家已经熟悉的事物和它比较,使读者通过比较得到具体而鲜明的印象。事物的特征也往往在比较中显现出来。

    在作比较的时候,可以是同类相比,也可以是异类相比,可以对事物进行“横比”,也可以对事物进行“纵比”。

    (5)画图表。为了把复杂的事物说清楚,还可以采用图表法,来弥补单用文字表达的缺欠,对有些事物解说更直接、更具体。

    (6)下定义。用简明的语言对某一概念的本质特征作规定性的说明叫下定义。下定义能准确揭示事物的本质,是科技说明文常用的方法。

    下定义的时候,可以根据说明的目的需要,从不同的角度考虑。有的着重说明特性,如关于“人”的定义;有的着重说明作用,如关于“肥料”的定义;有的既说明特性又说明作用,如关于“统筹方法”和“应用科学”的定义。

    ①人是能制造工具并使用工具进行劳动的高级动物。

    ②肥料是能供给养分使植物生长的物质。

    ③统筹方法,是一种安排工作进程的数学方法。

    ④工程技术的科学叫做应用科学,它是应用自然科学的基础理论来解决生产实践中出现的问题的学问。

    冰山

    2009-08-30

    0

    59

    21

    其他5条回答

    其他回答

    5条回答

    fujiyue

    2009-08-30

    列数字

    南浦大桥是上海市区第一座跨越黄浦江的大桥,建成于1991年11月。总长8346米,其中主桥全长846米,引桥全长7500米。

    作比较

    李白想落天外的特点,大大发展了庄子寓言,屈原初次的浪漫精神和表现手法,也融汇了道教的神仙意象,具有令人惊叹不已的艺术魅力,赢得了一代「诗仙」的赞誉。而杜甫是中国文学史上伟大的现实主义诗人,他的诗深刻地反映了唐朝由兴盛走向衰亡时期的社会面貌,具有丰富的社会内容,鲜明的时代色彩和强烈的政治倾向。他的诗激荡着热爱祖国、热爱人民的炽烈情感和不惜自我牺牲的崇高精神,因此被后人公认为“诗史”。

    举例子

    艺术手法方面的显著特点,比如,李白的诗歌在艺术手法方面的显著特点是:想象神奇,变化无端,结构纵横跳跃,句式长短错落,形成了雄奇飘逸的风格。

    0

    4

    5

    天宇

    2009-09-08

    中国人说话爱打比方,用于文章叫比喻。比方打得好,可以生动形象、通晓 明白,帮助人们理解问题,所以好的演讲者都会打比方。但是,如果比方打得不好,或者说打得太“好”,那就令人厌恶了。

    打比方是向别人——尤其是外行,解释一个问题的良好方法。很多学者和管理专家都愿意采用打比方的方式来说明一个问题。但是,并不是每一个人都知道如何打比方,以及如何才能准确地打比方。这两天和朋友聊天以及我看电视的经验表明这并不是一个简单的问题。因此想对这个问题说两点。

    1、打比方的第一个关键是要抓住问题的核心。换句话说,原问题和所打的比方必须具有共同的关键问题。很多比方,看似精妙,实际上是错误的。比如说,关于经济发展中的泡沫,曾经有非常著名的经济学家认为,它就像喝啤酒时的泡沫,有了泡沫喝起来才有味道。这不是一个好的比方。啤酒有泡沫才好喝,但经济发展有泡沫永远都是不好的。又是同一位经济学家,在别人问到他对经济发展的看法时说,经济发展就象骑自行车,太快了会摔跤,太慢了会倒。所以要不快不慢。这是个比较好的比方。因为经济增长太慢,社会问题就容易累积爆发出来。经济增长太快,就容易产生投资过热和通货膨胀等问题。

    打比方的第二个关键是必须用简单的东西来比喻复杂的问题,而不是用复杂的东西来比喻简单的问题。

    2、一种说明文的说明方法

    打比方是通过比喻的修辞方法来说明事物特征的一种方法。

    打比方的作用:使文章更具体、生动、形象。

    0

    2

    6

    tina

    2009-09-11

    举例子是举出代表性的能说明问题的例子来验证;

    列数字是用数字或者数据来更具有说服性,这个国家统计局最常用;

    作比较通常老师会用反面形象当做教材来比较正面形象;

    打比方也就是比喻,比如;

    0

    3

    6

    匿名用户

    2009-09-13

    举例子。举出实际事例来说明事物,使所要说明的事物具体化,以便读者理解,这种说明方法叫举例法。如:

    0

    3

    5

    翰林学士

    2009-09-13

    举例子:什么事水果啊?比如苹果,香蕉,西瓜等都是水果。列数字:我国约有13亿人。打比方:太阳像一个大火球。做比较:中国与其他国比,还是我们中国的人数多。

    0

    2

    4

    广告

    前往了解治疗方法

    推荐内容

    正在加载...

    © 2018 Sogou Inc.

    免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。

    http://www.pinlue.com/style/images/nopic.gif

    展开全文
  • 将excel表中的字母改为数字

    千次阅读 2020-04-26 21:16:45
    也就是在openpyxl的编程中,是用数字表示的,而不是用字母。我要处理的这个excel有上百,用字母表示不合适,毕竟不能一个一个从左到右去数。所以我需要把表示数的字母变成数字,方法如下: 1、 点击Excel ...

    我的需求是来源于:在openpyxl的编程中,比如你想遍历A列到D列的数据,程序是这么写的 

    for i in range(1,5)
    ……

    也就是在openpyxl的编程中,列是用数字表示的,而不是用字母。我要处理的这个excel有上百列,用字母表示不合适,毕竟不能一个一个从左到右去数。所以我需要把表示列数的字母变成数字,方法如下:

    1、 点击Excel 2016的文件选项。

    2、然后我们在界面的最左方可以看到有一个选项,我们点击它。专

    3、然后会弹出一个设置窗口,我们点击公式。

    4、可以看到在R1C1引用样式的勾选项,这里如果我们勾选那么列标ABC就变成了123。不勾选就还属是字母,所以我们点击勾选。

    5、然后点击下面的确定按钮。

    6、这样我们就完成设置了。

    展开全文
  • Java poi Excel xls数字转字母

    千次阅读 2016-12-02 16:24:42
    因为是按月导出 一个月最多31天,所以刚开始采用的办法是定义一个包含1到31字母的数组。后来想想这样总不是个办法 万一数更多 且是不确定的呢。于是研究了下 怎么把xls数字列号转成对应的字母。

    最近遇到导出的xls中 列是动态生成的,且单元格中需要用到公式,而xls公式不是用数字列号而是用列字母来表示的,这时需要把数字的列号转成该列对应的字母。因为是按月导出 一个月最多31天,所以刚开始采用的办法是定义一个包含1到31列字母的数组。后来想想这样总不是个办法 万一列数更多 且是不确定的呢。于是研究了下 怎么把xls数字列号转成对应的字母。

    先来看xlsx中的字母规律。在xls中,1到26列是A~Z,从第27列开始 是2个以上的字母组合 AA AB ... AZ 然后到BA BB ... BZ 直到 ZA ZB ... ZZ 这时两个字母的组合完了 接下来到3个字母 AAA AAB ... AAZ 然后到ABA ABB ... ABZ 一直到AZZ 然后是BAA BAB ... BZZ最后到ZAA ... ZZZ,接下来又是4个字母的组合如此循环...  。

    于是发现了规律: AA~AZ是在A~Z前面加了A,BA~BZ是在A~Z前面加了B,... ZA~ZZ是在A~Z前面加了Z,这时两个字母组合完毕;到3个字母 AAA~AAZ是在AA~AZ前面加了A,ABA~ABZ是在BA~BZ前面加了A,... AZA~AZZ是在ZA~ZZ前面加了A,这时AA~ZZ遍历完了一次(这里的AA~ZZ是前面两个字母组合里出现过的);接下来到下一轮遍历 在前面加B,BAA~BAZ是在AA~AZ前面加了B,... BZA~BZZ是在ZA~ZZ前面加了B,这时AA~ZZ又遍历完了一次;再进行下一轮遍历 一直到在所有两个字母的组合前都加过A~Z,这时3个字母的组合就全部组合完毕了。接下来到4个字母的组合 跟前面的2个、3个字母的组合类似,都是在上一个组合的基础上分别在前面加上A~Z。如下图


    字母组合是从第27列开始,每次的组合都是在上一个组合的基础上分别在前面加上A~Z。比如计算n=3个字母的组合AAA~ZZZ(上图红色竖线箭头部分):2个字母组合所在的范围是AA~ZZ(上图红色的“currentLen”部分),当前数组的位置(比如AAB)i与currentLen进行取余运算(i%currentLen)得到的结果就是要与2个字母组合的哪个种组合进行字符串拼接(该值还要与“lastLen”(上图红色lastLen)相加才能定位到该位置对应的字母),比如当前是第一轮遍历 则是A与AB进行拼接成AAB,这也就是上面举例的当前数组位置对应的字母(AAB)。假设我们用变量letterIdx表示第几轮,每上个组合遍历完一次letterIdx都要+1,表示下一个要拼接在前面的字母。因为拼接在前面的字母是A~Z 所以每次取该轮字母时都要跟26取余(letterIdx%26),当letterIdx%26=0时 说明A~Z都与上个组合拼接过了 也就是当前n个字母组合所有情况都组合过了,再进行下一轮n+1个(4个)字母的组合(上图黑色竖线箭头部分),这时currentLen变成了上一个组合的长度(上图黑色的currentLen),而lastLen变成了“上个组合的currentLen+lastLen”(上图黑色的lastLen部分),接下来的循环遍历跟上个组合一样进行。

    上代码:(代码里的注释请结合上文来看,注释里说到的“组合的情形”是指该组合的某一种组合,如BK、AH、XI都是2个字母组合的一种情形。因为实在也不知道应该用哪个词来表达)

    public final class Columns {
    
    	private Columns() {}
    
    	private static String[] sources = new String[]{
    		"A","B","C","D","E","F","G","H",
    		"I","J","K","L","M","N","O","P",
    		"Q","R","S","T","U","V","W","X","Y","Z"
    	};
    
    	/**
    	 * (256 for *.xls, 16384 for *.xlsx)
    	 * @param columnNum 列的个数,至少要为1
    	 * @throws IllegalArgumentException 如果 columnNum 超出该范围 [1,16384]
    	 * @return 返回[1,columnNum]共columnNum个对应xls列字母的数组
    	 */
    	public static String[] getColumnLabels(int columnNum) {
    		if(columnNum<1||columnNum>16384)
    			throw new IllegalArgumentException();
    		String[] columns = new String[columnNum];
    		if(columnNum<27){	//小于27列 不用组合
    			System.arraycopy(sources, 0, columns, 0, columnNum);
    			return columns;
    		}		
    		System.arraycopy(sources, 0, columns, 0, 26);	//前26列不需要进行组合
    
    		//因为基于数组是从0开始,每到新一轮letterIdx 会递增,所以第一轮 在递增前是-1
    		int letterIdx = -1;
    		int currentLen = 26;//第一轮组合(2个字母的组合)是分别与A-Z进行拼接 所以是26
    		int remainder;
    		int lastLen = 0;	//用于定位上文提到的i%currentLen实际在数组中的位置		
    		int totalLen = 26;	//totalLen=currentLen+lastLen
    		int currentLoopIdx = 0; //用来记录当前组合所有情形的个数
    
    		for(int i=26;i<columnNum;i++){ //第27列(对应数组的第26个位置)开始组合
    
    	//currentLen是上个组合所有情形的个数,与它取余找到要与上个组合的哪种情形进行拼接
    			remainder = currentLoopIdx%currentLen;
    
    			if(remainder==0){
    				letterIdx++; //完成一次上个组合的遍历,转到下个字母进行拼接
    				int j = letterIdx%26;
    
    			//A-Z 26个子母都与上个组合所有情形都进行过拼接了,需要进行下个组合的拼接
    				if(j==0&&letterIdx!=0){ 
    					lastLen = totalLen; //下个组合的lastLen是上个组合的totalLen
    
    				/**
    	 		     * 下个组合的currentLen是上个组合的所有组合情形的个数
    	 		     * (等于上个组合的currentLen*26),26也就是拼接在前面的A-Z的个数
    	 		     */			 
    					currentLen = 26*currentLen;
    
    					totalLen = currentLen+lastLen; //为下一轮的开始做准备
    					currentLoopIdx = 0; //到下一轮了 因此需要重置
    				}
    			}
    			/**
    	 	     * sources[letterIdx%26]是该轮要拼接在前面的字母
    	 	     * columns[remainder+lastLen]是上个组合被拼接的情形
    	 	     */		
    			columns[i] = sources[letterIdx%26]+columns[remainder+lastLen];
    			currentLoopIdx++;
    		}
    		return columns;
    	}
    }
    测试:
    public static void main(String[] args) {
    	String[] columns = getColumnLabels(37 );
    	System.out.println("1到37列:"+Arrays.toString(columns));
    	System.out.println();
    	long start = System.nanoTime();
    	columns = getColumnLabels(256);
    	System.out.println("创建"+columns.length+"列用时(纳秒):"
    					   +(System.nanoTime()-start));
    	System.out.println("xls第"+columns.length+"列:"
    					   +columns[columns.length-1]);
    	System.out.println();
    	start = System.nanoTime();
    	columns = getColumnLabels(16384);
    	System.out.println("创建"+columns.length+"列用时(纳秒):"
    					   +(System.nanoTime()-start));
    	System.out.println("xlsx第"+columns.length+"列:"
    					   +columns[columns.length-1]);
    }

    打印:
    1到37列:[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, 
    U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK]
    
    创建256列用时(纳秒):192833
    xls第256列:IV
    
    创建16384列用时(纳秒):9574147
    xlsx第16384列:XFD

    ------------------------------------------------------分隔线-----------------------------------------------------------------

    后来有想到,如果是不需要(或者条件不允许)提前创建(这么大的)数组呢,这时需要通过列号直接获取该列对应的字母。于是又想 应该怎么转换。。。
    先看看从字母转数字的,比如BGQCV 转成数字(虽然xlsx最后一列是XFD,这里只讨论数字与字母的互转):该列标有5个字母,说明前面已经有4个字母、3、2、1个字母的全组合了 才会到5个字母的组合,于是W1=26^4+26^3+26^2+26^1,BGQCV 的第一个字母是B,说明前面有Axxxx的全组合了,于是有该组合数T1=1*(26^4)。再来看第二个字母是G,说明前面已经有BAxxx~BFxxx的全组合了,于是有该组合数T2=6*(26^3)。第三个字母是Q,说明前面已经有BGAxx~BGPxx的全组合了,于是有该组合数T3=16*(26^2)。第四个字母是C,说明前面已有BGQAx~BGQBx的全组合了,该组合数T4=2*(26^1)。最后一个字母是V,说明前缀是BGQC的组合BGQCA~BGQCV共有T5=22个。
    好了,BGQCV 所处的列数W=W1+T1+T2+T3+T4+T5=(26^4+26^3+26^2+26^1)+1*(26^4)+6*(26^3)+16*(26^2)+2*(26^1)+22 = 1048576。
    String[] sources = new String[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    数组sources作为我们解决问题的字母来源(当然也可以不定义数组而是用ASCII码)。
    现在知道了通过字母列标是如何求出其对应的第几列,我们把问题一般化:求第W列对应的列标。设第W列对应的字母有n个,根据上面的分析可知W1=26^(n-1)+26^(n-2)+26^(n-3)+...+26^2+26^1。我们规定A对应1,B对应2 ... Z对应26。设第1个字母对应数字是num_1,第二个字母对应的数字是num_2,...,第n个字母对应数字num_n。根据上面的分析 于是有T1=(num_1-1)*26^(n-1),T2=(num_2-1)*26^(n-2),...,Tn=(num_n-1)*26^0。
    整合起来,又因为26^0=1 于是有W=W1+T1+T2+...+Tn=(26^(n-1)+26^(n-2)+26^(n-3)+...+26^2+26^1)+(num_1-1)*26^(n-1)+(num_2-1)*26^(n-2)+...+(num_(n-1)-1)*26^1+(num_n-1)。
    除了最右边的字母(也就是第n个字母)对应的位置的数字num_n-1除外,其它字母对应的位置的数字均是26的倍数。于是  第一次W对26取余W%26的结果所对应的字母(还记得吗 我们用1代表A,2代表B,... ,26代表Z)就是最右边的字母。好了 现在已经求出了最右边的字母,还剩n-1个未知字母,采用同样的办法可求出次右边的字母:W-(num_n-1)然后再除以26,得到的结果再减去1(因为W1中存在26^1,其除以26后结果就是1,为了保证除了次右边字母对应的位置的数字外,其余各字母对应的位置的数字均是26的倍数),把结果赋回给W,这时求次右边的字母就跟求最右边的字母类似了:
    W-(num_n-1)=(26^(n-1)+26^(n-2)+26^(n-3)+...+26^2+26^1)+(num_1-1)*26^(n-1)+(num_2-1)*26^(n-2)+...+(num_(n-1)-1)*26^1
    然后两边除以26:(W-(num_n-1))/26=(26^(n-2)+26^(n-3)+26^(n-4)+...+26^1+1)+(num_1-1)*26^(n-2)+(num_2-1)*26^(n-3)+...+(num_(n-1)-1)
    然后两边再减去1:(W-(num_n-1))/26-1=(26^(n-2)+26^(n-3)+26^(n-4)+...+26^1)+(num_1-1)*26^(n-2)+(num_2-1)*26^(n-3)+...+(num_(n-1)-1)
    然后把左边的(W-(num_n-1))/26-1看成整体的W,是不是跟最开始求最右边字母的很类似?
    这样从右往左求出来的字符串 跟所要的结果恰好是相反的 所要需要反转。
    上代码:
    /**
     * 返回该列号对应的字母
     * @param columnNo (xls的)第几列(从1开始)
     */
    public static String getCorrespondingLabel(int columnNo){
    	if(columnNo<1/**||columnNo>16384**/)
    		throw new IllegalArgumentException();
    	String[] sources = new String[]{"A","B","C","D","E","F","G","H","I","J","K","L","M"
    		,"N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    	StringBuilder sb = new StringBuilder(5);
    	int remainder = columnNo%26;	//求最右边的字母
    	if(remainder==0){	//说明(num_n-1)=26,第26个字母是Z
    		sb.append("Z");
    		remainder = 26;	//因为接下来W-(num_n-1)也就是columnNo-remainder,所以需要把remainder赋值回26
    	}
    	else{  //如果最右边字母不是Z的话,就去sources数组相应的位置取字母,remainder不用变
    	  sb.append(sources[remainder-1]);
    	}
    	columnNo = (columnNo-remainder)/26-1;	//用来判断接下来是否还有其他字母
    
    	//当 当前循环是求最后一个字母时(从右往左),(columnNo-remainder)/26就会是0,再减1也就是-1。
    	//因此通过判断(columnNo-remainder)/26-1是否大于-1来判断结束
    	while(columnNo>-1){
    		remainder = columnNo%26;
    		sb.append(sources[remainder]);
    		columnNo = (columnNo-remainder)/26-1;
    	}
    
    	return sb.reverse().toString();	//因为是从右往左解析的 所以需要反转
    }


    测试:
    public static void main(String[] args) {
    	String label = getCorrespondingLabel(37 );
    	System.out.println("第37列:"+label);
    	System.out.println();
    	long start = System.nanoTime();
    	label = getCorrespondingLabel(256);
    	System.out.println("查找第256列对应字母 用时(纳秒):"
    					   +(System.nanoTime()-start));
    	System.out.println("xls第256列:"+label);
    	System.out.println();
    	
    	label = getCorrespondingLabel(16384);
    	
    	System.out.println("xlsx第16384列:"+label);
    }
    打印:
    第37列:AK
    
    查找第256列对应字母 用时(纳秒):7776
    xls第256列:IV
    
    xlsx第16384列:XFD
    这时又想到,求n列列标 用方法1好一点呢 还是用方法2循环n次好呢。。。
    方法1求数组的 对于26+26*26=702列以下,可以将求组合部分抽出来,减少不必要的求余运算multiple%26,因为这时multiple不会超过26。方法2也可以改成从0开始的 毕竟poi列数是从0开始的。不预定义字母数组的话 也可以用ASCII码来转换。
    -----------------------------------------------分隔线-----------------------------------------------------

    最终代码:

    /**
     * 
     * Excel列号转字母工具类
     * 
     */
    public final class Columns {
    
    	private Columns() {
    	}
    
    	private static String[] sources = new String[] { "A", "B", "C", "D", "E",
    			"F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
    			"S", "T", "U", "V", "W", "X", "Y", "Z" };
    
    	/**
    	 * (256 for *.xls, 16384 for *.xlsx)
    	 * 
    	 * @param columnNum
    	 *            列的个数,从1开始
    	 * @throws IllegalArgumentException
    	 *             如果 columnNum 超出该范围 [1,16384]
    	 * @return 返回[1,columnNum]共columnNum个对应xls列字母的数组
    	 */
    	public static String[] getColumnLabels(int columnNum) {
    		if (columnNum < 1 || columnNum > 16384)
    			throw new IllegalArgumentException();
    		String[] columns = new String[columnNum];
    		if (columnNum < 27) {
    			System.arraycopy(sources, 0, columns, 0, columnNum);
    			return columns;
    		}
    		int multiple = -1;
    		int remainder;
    		System.arraycopy(sources, 0, columns, 0, 26);
    		int currentLoopIdx = 0;
    		if (columnNum < 703) {
    			for (int i = 26; i < columnNum; i++) {
    				remainder = currentLoopIdx % 26;
    				if (remainder == 0) {
    					multiple++;
    				}
    				columns[i] = sources[multiple] + columns[remainder];
    				currentLoopIdx++;
    			}
    		} else {
    			int currentLen = 26;
    			int totalLen = 26;
    			int lastLen = 0;
    			for (int i = 26; i < columnNum; i++) {
    				remainder = currentLoopIdx % currentLen;
    				if (remainder == 0) {
    					multiple++;
    					int j = multiple % 26;
    					if (j == 0 && multiple != 0) {
    						lastLen = totalLen;
    						currentLen = 26 * currentLen;
    						totalLen = currentLen + lastLen;
    						currentLoopIdx = 0;
    					}
    				}
    				columns[i] = sources[multiple % 26]
    						+ columns[remainder + lastLen];
    				currentLoopIdx++;
    			}
    		}
    
    		return columns;
    	}
    
    	/**
    	 * 返回该列号对应的字母
    	 * 
    	 * @param columnNo
    	 *            (xls的)第几列(从1开始)
    	 */
    	private static String getCorrespondingLabel(int columnNo) {
    		if (columnNo < 1/** ||columnNo>16384 **/
    		)
    			throw new IllegalArgumentException();
    
    		StringBuilder sb = new StringBuilder(5);
    		int remainder = columnNo % 26;
    		if (remainder == 0) {
    			sb.append("Z");
    			remainder = 26;
    		} else {
    			sb.append(sources[remainder - 1]);
    		}
    
    		while ((columnNo = (columnNo - remainder) / 26 - 1) > -1) {
    			remainder = columnNo % 26;
    			sb.append(sources[remainder]);
    		}
    
    		return sb.reverse().toString();
    	}
    
    	/**
    	 * 列号转字母
    	 * 
    	 * @param columnIndex
    	 *            poi里xls的列号(从0开始)
    	 * @throws IllegalArgumentException
    	 *             if columnIndex less than 0
    	 * @return 该列对应的字母
    	 */
    	public static String getIndexLabel(int columnIndex) {
    		return getCorrespondingLabel(columnIndex + 1);
    	}
    
    }
    展开全文
  • 编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字。 实现思路: 定义方法findNums(),用于实现查找所有能够整除指定数字的所有数字。 根据需求说明要求,方法findNums()...
  • 函数的概念及作用

    千次阅读 2019-11-28 15:11:33
    1.函数的概念及作用 函数:就是一个工具,完成某个功能的一段代码块 系统函数:js自带的一些函数 2.函数的声明 关键字函数(function)声明方式: function 函数名(){函数体} 赋值方式(var声明方式): var 函数名 =...
  • 基础 | Python下的矩阵定义 (上)

    千次阅读 2021-01-13 08:12:25
    关键词:线性代数 / 矩阵 / 基本定义作者:郭俊麟 | 清华伯克利 数据科学人工智能作为近10年最火的学科之一,背后却有着三大基础学科支持着他的发展,分别是线性代数,微积分,还有概率论,对于各式各样的经典算法,...
  • 使用map的方法就可以实现把某一的字符类型的值转换为数字。...首先定义一个字典,然后使用map方法就可以把某一的字符类型的值转换为数字。 以上就是对使用pandas把某一的字符值转换为数字的认识。 ...
  • 定义时对整数进行数据类型定义

    千次阅读 2019-01-09 22:20:52
    最近看代码时,发现宏定义时就对整数进行了数据类型定义,其实也是对宏定义的数据类型进行了定义。 (1)定义为int型 #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; # ...
  • 在 SQL 数据库中,生成(Generated Column)是指由表中其他字段计算得到的,因此也称为计算(Computed Column)。 本文介绍各种主流数据库对于生成/计算的实现,包括 Oracle、MySQL、SQL Server、...
  • 说明方法的作用答题格式

    千次阅读 2021-02-11 21:30:16
    列数字:科学、具体、准确地说……,使说明更有说服力,令读者信服。打比方:将……比作……,生动想象地说明该事物的……特点,增强了文章的趣味性。①举例子:这里运用举例子的说明方法,通过举……具体的实例对...
  • select t.daytime,‘2018-2-20’ day1 from test_0219_2 t 查出该表中daytime的所有值,并为该查询出的数据,增加一day1,该值全为2018-2-20
  • MATLAB一维数组(向量)的定义

    千次阅读 2021-04-18 03:32:34
    在 MATLAB 中,向量和矩阵主要是由数组表示的。数组运算始终是 MATLAB 的核心内容,并且 MATLAB 区别于...矩阵和向量的概念矩阵其实就是由 m×n 个元素组成的一个 m 行 n 的二维数组。特别地,一个 m×1(m 行 1 ...
  • 如何在Python中定义函数实例

    千次阅读 2020-04-20 15:35:39
    函数的定义即调用 函数是封装起来的代码功能。定义时使用 def 在使用函数时需要先调用,才可以使用。 def hello(): # 函数的定义 print('hello1') print('hello2') print('hello3') hello() # 函数的调用,直接输...
  • Java语言定义一个4x4的二维数组,然后从键盘输入16个数字构成矩阵,然后将转置矩阵输出出来 在线等
  • 其余正常显示数据库中的数据,只有第一显示按顺序排列的数字,有多少行数据,就显示多少数字,类似于对数据的一个排名,但是这一一定要有表头
  • 数组的定义及使用

    万次阅读 2018-07-26 16:00:15
    例如:如果现在要想定义100个整型变量,如果按照传统的思路: int i1,i2,……i100,一共写100个变量。 这100个变量满足逻辑要求,但是没有任何的逻辑的控制关系,完全独立,那么就会出现对象不方便管理的情况。这种...
  • matlab定义变量-MATLAB,变量

    万次阅读 2021-04-24 21:26:12
    MATLAB中变量名以字母开头,后接字母、数字或下划线,最多63个字符;区分大小写;关键字和函数名不能作为变量名。扩展知识:Matlab变量的特点:不需事先声明,也不需指定变量类型,Matlab自动根据所赋予变量的值或对...
  • C#数组的定义及使用(一)

    万次阅读 2019-03-11 11:44:10
    //定义两行三的二维数组 int ans = 0; Console.WriteLine("二维数组输出"); for (int i = 0; i ; i++) { for (int j = 0; j ; j++) { b[i, j] = ans; ans++; Console.Write("{0} ", b[i, j]); } ...
  • SQL server 2008 定义数据类型

    万次阅读 2018-10-28 17:49:08
    1. 字符数据类型 ...如果有一表列名为FirstName且数据类型为varchar(20),同时将值Brian存储到该中,则物理上只存储5个字节。但如果在数据类型为char(20)的中存储相同的值,将使用全部20个字节。...
  • c语言中printf用法及其函数定义

    千次阅读 2021-05-18 12:28:43
    c语言中printf用法及其函数定义发布时间:2020-04-09 10:51:14来源:亿速云阅读:354作者:小新今天小编给大家分享的是c语言中printf用法及其函数定义,很多人都不太了解,今天小编为了让大家更加了解c语言中的...
  • 数据库基本表的定义、删除修改

    千次阅读 2019-05-21 15:30:50
    1.定义基本表 创建了一个模式即建立了一个数据库的命名空间,一个框架。SQL语言使用create table语句定义基本表,格式如下: create table <表名>(<列名><数据类型>[列级完整性约束条件] [,&...
  • 本文介绍了图像中像素的邻域关系,通过邻域关系中基于限定灰度值的集合定义了邻接关系,通过邻接可以构建像素间的通路,基于通路构建了像素间的连通关系和连通集,并进一步定义了图像的区域和边界。 如果一个函数...
  • 基于 FPGA 的数字表示

    万次阅读 2018-11-13 17:35:41
    文章目录基于 FPGA 的数字表示零、计数系统框架一 、整数的表示1.1 二进制反码1.2 二进制补码二、 非整数值的表示2.1 定点二进制数2.2 定点量化2.4 小数部分截断2.5 一种不同的方法 Trounding三、 浮点数定义及表示...
  • 黑盒测试和白盒测试定义及区别

    万次阅读 2020-07-05 11:50:26
    一、定义 1.1黑盒测试 黑盒测试又称为功能测试,主要检测软件的每一个功能是否能够正常使用。在测试过程中,将程序看成不能打开的黑盒子,不考虑程序内部结构和特性的基础上通过程序接口进行测试,检查程序功能是否...
  • Python实现把列表里的数字按从小到大的顺序排列

    万次阅读 多人点赞 2019-04-13 19:20:09
    拿出列表里的第0个元素,把它赋给一个叫做“最小值”的变量,然后用这个变量去跟后面的每个数字一一对比,如果碰到比它小的,就把那个新发现的小数字赋给“最小值”变量,否则维持原状。 这样一轮下来,就能找到...
  • Python定义函数实现累计求和操作

    千次阅读 2020-11-22 13:36:07
    一、使用三种方法实现0-n累加求和定义函数分别使用while循环、for循环、递归函数实现对0-n的累加求和1、使用while循环定义一个累加求和函数sum1(n),函数代码如下:2、使用 for循环定义一个累加求和函数sum2(n),函数...
  • 基本的数学运算与矩阵运算MATLAB基本语法变量变量名保留变量不适合做变量名变量不应当覆盖内置函数变量类型数字型变量的显示格式MATLAB命令行使用MATLAB进行数字运算使用MATLAB计算数学表达式MATLAB内置的数学函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 472,479
精华内容 188,991
关键字:

列数字定义及作用