input验证只能输入数字可以为小数_学会Excel数据验证,数据规范不出错

ee69275c658d932269c3b2b6f20fa4b8.png

知道大家平时使用 Excel 有没有这样饱受折磨的情况:

分发给别人填写的表格,明明已经把各项填写规范的文档一起打包好发给对方了,收回来的表格还是惨不忍睹……

举个栗子:

填写规范—17物流管理(1)班,对方填写—17物流1班;

填写规范—身份证18位数字,对方填写—要么多一位,要么少一位

数据填写不规范直接影响了后续的统计和运算,特别是数据透视表这种功能,对数据源的规范要求很高。这时候就出现填表人很爽啊随心所欲,回收表格汇总统计的人却总是偷偷抹泪的情况。

真的是时候打一架!哦不不不,是时候做出一些措施了!

先放本篇干货大纲,如果你觉得知识点你已经会了,可以直接滑到需要的地方~

3ae55045c265c010f98fcbc8b97d3b50.png

01. 什么是数据验证

数据验证位于 Excel 中「数据」选项卡下的「数据工具」功能组,根据 Excel 中的提示,它用于限制数据类型或用户输入单元格的值,最常见用法之一是创建下拉列表

对方不爱认真看填写规范,那我们就让他们在填写时按照我们的指示来填写。这样既方便了他人填写,显得我们很贴心的样子,同时也防止自己统计出现错误,大家又可以一起好好玩耍了呢。

这里我概括一下几个基础用法。

02. 数据验证有哪些基础用法

① 设置基础的验证条件

数据验证中的限定条件有整数、小数、序列、日期、时间、文本长度、自定义,用于限制输入的数据类型或输入单元格的值。

12c280fc477144ed3a1937de78ae71c6.gif

整数、小数和文本长度:

这三项比较简单,本质上都是限制“范围”,即限制对方只能录入你规定范围内的整数 / 小数,或者规定对方录入的文本长度。

比如身份证的输入,可以先将单元格格式改为文本(因为Excel 中超过15位数字会记为科学记数法),然后再到数据验证中限制其文本长度为18

日期和时间:

其实这两者也是限制范围,为什么单独拎出来说呢~主要是因为设置的时候,首先格式要注意好。

日期的规范录入是用横杠或斜杠隔开年月日:2019-1-1 或者 2019/1/1,如果输成2019.1.1,不好意思,不认你的。

时间一般用英文冒号隔开时分秒,但经过尝试这里用中文冒号它可以自动识别为英文,就不多说了~

序列和自定义:

序列用于创建下拉列表;自定义用于编写公式来限定单元格的填写内容。

② 选定单元格时显示输入信息

顾名思义,这个设置用于对方在点中单元格准备输入信息的时候,可以看到我们设置的提示,减少输入错误的几率:

9269c9ed484ce86a825d34077ed6a43a.gif

③ 出错警告

设置出错警告后,如果你已经利用数据验证设置好了填写规范,这时对方如果填错就会弹出警示框:

3771dbb67640df070b8bfcf1e9f6d731.gif

④ 圈释无效数据

数据验证并不能完全制止他人录入规定外的数据,比如将额外的数据复制粘贴进来时,你设置的数据验证就已经被破坏了,有种防不胜防的感觉……

094b390f993f614ce772820d34f11f87.gif

所以表格填完后如果不放心,我们可以把原来设置的数据验证再设置一次,然后「圈释无效数据」:

c3581d5dcdf5aec39e3d5cee72be39a0.gif

这样就算被强制改动过的地方也逃不过数据验证的火眼金睛啦~虽然这圈圈的外观需要再美观一些emmm(另外建议在这个操作前保存一下数据,这一步可能会有点卡)。

⑤ 复制数据验证条件

如果间断地有好几个地方我们都想用同一个验证条件,这时候不用一个个地去设置,只要把验证条件粘贴过去就可以啦。

操作路径:复制—选择性粘贴—验证

dfafae699f231a8cb8f40d23079808d4.gif

03. 如何制作下拉列表

相信一些比较基础的验证条件设置大家稍微琢磨一下都会操作了,比如设置下数值范围、设置下文本长度,都比较简单,那下面分享一些下拉列表以及结合函数的实际运用。

下拉列表是很常用的填写数据的方法,在谈数据验证如何设置下拉列表前,先说下单元格自带的下拉列表。

大家都知道在 Excel 中输入数据,如果下方开始输入内容时跟上面单元格有相同的字,它会智能地识别供你直接填充:

a7be687efe99c5db38d2329a882c4981.gif

这就是 Excel 单元格下的隐藏列表,我们可以按键盘上 alt+向下箭头把这个列表调出来:

da553fd4e66060c8cd69841521df3713.gif

但其实每次按快捷键也没有特别高效,所以用数据验证设置下拉列表快点 pick 起来~

① 一级下拉列表

前面我们说到啦,数据验证中的「序列」用于设置下拉列表,先来看最基础的一级下拉列表的两种方法。

方法1:直接输入列表项目

在数据验证窗口中,选择序列后,直接在「来源」中输入列表项目。

比如,性别的下拉菜单需要设置男和女两项,即输入「男,女」,注意逗号是英文状态下的逗号

c2556138ca6a705f5976a7b67fa38657.gif

方法2:将含有列表项目的单元格区域导入来源

2f4333ee63b32f821ed1789d4b038752.gif

② 二级下拉列表

先看数据源和效果图(通过设置下拉列表,使得各个大类中有对应的科目可供下拉选择)

3e72e8dd3b1c8b63bc397e808a6fe10c.gif

step 1:选中数据源区域,点击「公式」选项卡下 - 定义的名称 - 根据所选内容创建,勾选首行

23838eb825a4ae00e6ee10fa6f5fa6bc.gif

这一步操作后,我们选中每一列细分课程,就可以在左上角名称框处看到它们已经被命名好啦,名称为首行的内容,即 word、excel、ppt 这个区域被命名为 office,以此类推。

ps:你也可以选择在名称管理器中查看命名区域,这里是命名区域汇总的地方:

7636497dd4b64ef1b4e1900f5a998e7d.gif

step 2:设置好一级列表,这个就不用多说了~跟前面的方法一样:

bcae2541a22af1faccade74eb99d5ad9.gif

step 3:设置二级下拉列表,选中区域,同样设置序列,「来源」中公式为 =INDIRECT(G4):

1202a25a1b69476835e54723bcacf19a.gif

效果达成啦。顺带解释下 INDIRECT 在这里的用法,INDIRECT 的中文意思为间接的,这里可以理解为间接地引用:

c9b38eb0c8c5ebba0a7a791f8304b445.png

比如上面这个例子中,直接地引用情况下,用 =A3 表示返回 A3 单元格的内容,就是 A2;用上 INDIRECT 间接引用后,返回 A3 单元格内容 A2,这里 A2 又可以指向 A2 单元格中的内容,所以返回的是一周进步。

所以上面的=INDIRECT(G4),间接返回的是以 office、adobe 和新媒体为名称的区域,即它们对应的细分课程。

自动更新:

为避免我们下次还要添加类别,重复设置二级下拉列表的操作,我们可以给每一列运用表格样式,使得数据源自动扩展区域。

操作路径:选中各列数据 - 插入 - 表格(快捷键 ctrl+T)

498d1f8b5c995e47fcbe595504414c23.gif

这样即使每一列会新增科目,下拉列表中也可以实时更新啦。

04. 结合函数的实例运用

① 只能输入整数

诶,不就是限制录入整数嘛挺简单啊我会啊,上面不是说过了吗基础的验证条件。

然后一设置发现噢!基础的设置一定要给一个范围,不然不给限制:

a784ed402f63cc3b62a7396e9283b250.gif

这个时候就要用到函数啦。大家一定记得前面说到编写公式需要到「自定义」里设置对吧!这里用到公式:=A1=INT(A1)

bf307b3bd8a968ef0572fb5a164e9a29.gif

INT 是取整函数,它会向数值减小的方向取整,即返回小于等于参数的最大整数。

公式 =A1=INT(A1),如果 A1 输入小数的话,那它永远也不会跟它取整后的数值相等,所以就会出错。

② 只能输入文本

公式:=ISTEXT(A1)。ISTEXT 用于判断值是否为文本。

e752cc2879eb0e65529562e091869ab0.gif

③ 只能输入数值

公式:=ISNUMBER(A1)。

ISNUMBER 用于判断值是否为数值,这里不多演示啦。

如果想输入范围在 a 到 b 内的数值,可以用 =(A1-a>0)*(A1-b<0),这样就不受整数和小数限制了。

比如范围在100到200内的数值,可以用 =(A1-100>0)*(A1-200<0)。乘号 * 在 Excel 公式中表示 and(和,并且),所以这里也可以用 =AND(A1-100>0,A1-200<0)。

如果是小于100或大于200,即或的关系,可以用 =OR(A1-100>0,A1-200<0)。

④ 只能录入日期

公式:=DAY(A1) 或 =MONTH(A1) 或 =YEAR(A1)

DAY、MONTH、YEAR 函数分别用于提取日期中的日、月、年,若单元格是文本等其它内容则无法提取。

另外,由于日期的本质为数字,所以输入数字依然不受影响,后续可选择将单元格格式改为日期:

e243700a5681a7fb00d1783cff3817b8.gif

⑤ 限制录入重复值

限制录入重复值,即这一列中数下来只能有一个这样的值。

公式:=COUNTIF(A:A,A1)=1。

COUNTIF 表示满足某个条件则计数上加一,即表示在 A 列中 等于 A1 中这个值的单元格只有一个,如果有重复,则不止一个,就会出错。

ca4ae09023340a9ab4c34ed1b4d0be00.gif

05. 写在最后

今天为Excel里的数据验证写了一篇应用文章,相信一定会有一些功能对你有所帮助。

内容很多,再来复习下今天的知识点:

① 什么是数据验证

② 数据验证有哪些基础用法

③ 如何制作下拉列表

④ 结合函数的实例运用

其中下拉列表在工作场景中还是非常常用和好用的,相信大家已经 get 到做法啦,函数只列举了一些简单的使用,具体还是得看使用场景、问题来结合,复杂的限制难度则较高。

那下次再见啦,有什么问题或者还有想要学习的 Excel 技巧欢迎留言~

f431e62c2b662a6efc8bd64d968f36c0.png
<think>好的,用户想用Python的Pandas处理Excel文件,根据“摄像头路数”来扩展数据行。首先,我需要明确用户的具体需求。根据“摄像头路数”扩展数据行,可能是指根据该列的数值复制对应的行数。例如,如果某行的摄像头路数是3,那么这一行需要被复制成3行。 接下来,我需要回忆Pandas中处理这类问题的方法。通常,这种情况可以使用`df.explode()`函数,但这里需要根据列的值来复制行,可能需要先创建一个列表,然后展开。例如,对于每一行,生成一个包含摄像头路数个元素的列表,再使用`explode`方法扩展。 然后,我需要考虑如何处理Excel文件的读取和写入。用户提供的示例代码中使用了`pd.read_excel`,所以应该继续使用这个方法。处理缺失值的部分,用户之前用了`dropna`,但在这个问题中是否需要处理缺失值?可能用户的数据中“摄像头路数”列存在缺失值,这时候需要先处理,比如充默认值或删除缺失行,否则在转换时会出错。 接下来是代码步骤: 1. 读取Excel文件,指定工作表。 2. 处理缺失值,确保“摄像头路数”列没有NaN。可能需要用`dropna(subset=['摄像头路数'])`或者充0,视情况而定。 3. 将“摄像头路数”列转换为整数类型,因为可能读取为浮点数。 4. 为每行生成对应数量的列表,例如摄像头路数为3,则生成[1,2,3],或者直接复制行。过这里用户可能只需要复制行数,所以可以用`df.loc[df.index.repeat(df['摄像头路数'])]`来复制行。 5. 重置索引,避免重复索引。 另外,用户提供的参考代码中使用了`dropna`,所以可能需要在处理前先去除缺失值。此外,示例中的摄像头路数可能是指每个记录需要扩展成多少路,每路作为独立行,可能还需要添加一个“路号”列来标识第几路。 可能的代码示例: 读取数据后,先处理缺失值,然后复制行,再生成路号。例如: ```python import pandas as pd df = pd.read_excel('input.xlsx', sheet_name='Sheet1') df = df.dropna(subset=['摄像头路数']) # 去除缺失值 df['摄像头路数'] = df['摄像头路数'].astype(int) # 转换为整数 expanded_df = df.loc[df.index.repeat(df['摄像头路数'])].reset_index(drop=True) expanded_df['路号'] = expanded_df.groupby(level=0).cumcount() + 1 ``` 这样,每行会根据摄像头路数复制相应的次数,并添加路号列。然后可以保存到新的Excel文件。 需要验证代码的正确性,比如测试数据是否正确扩展,是否有路号列,以及处理缺失值是否正确。此外,用户可能需要将结果保存回Excel,所以需要添加`to_excel`部分。 最后,生成相关问题,可能涉及处理其他类型的数据扩展、处理更复杂的复制逻辑,或者性能优化等。</think>以下是使用Python Pandas根据“摄像头路数”扩展数据行的完整实现方案: ```python import pandas as pd # 读取Excel文件 input_file = "输入文件.xlsx" output_file = "扩展后数据.xlsx" # 读取指定工作表 df = pd.read_excel(input_file, sheet_name='数据表') # 处理缺失值(确保摄像头路数列完整) df_clean = df.dropna(subset=['摄像头路数']).copy() # 转换数据类型为整数 df_clean.loc[:, '摄像头路数'] = df_clean['摄像头路数'].astype(int) # 扩展数据行(核心操作) expanded_df = df_clean.loc[df_clean.index.repeat(df_clean['摄像头路数'])].reset_index(drop=True) # 添加路号列 expanded_df['路号'] = expanded_df.groupby(level=0).cumcount() + 1 # 保存结果到新Excel文件 expanded_df.to_excel(output_file, index=False) ``` ### 实现说明 1. **数据清洗**:使用`dropna`确保"摄像头路数"列无缺失值[^1] 2. **类型转换**:将摄像头路数转换为整型,避免小数导致错误 3. **行扩展**:通过`index.repeat()`实现行复制,比循环更高效 4. **路号生成**:使用`groupby.cumcount()`自动生成序列号 5. **结果输出**:保持原始数据结构,新增"路号"列标识扩展记录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值