鱼C论坛

 找回密码
 立即注册
查看: 1332|回复: 19

提取数据缺失值的情况

[复制链接]
发表于 2019-4-2 08:54:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想提取数据的缺失值情况,具体如下:
11.jpg

想提取其中指定字段的所有数据均是缺失值的企业名称。。我试着如这个代码去做,却会报错:
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
求解。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-2 09:40:05 | 显示全部楼层
看不懂你的 需求
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-2 09:46:28 | 显示全部楼层

...看来我的表达能力实在不行。。之前也有人说过看不懂我说的话。。

我的意思是,在一堆数据中,想提取所有价格、型号均为缺失值的企业名称,代码该怎么写。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-2 09:49:18 | 显示全部楼层
老笨啊 发表于 2019-4-2 09:46
...看来我的表达能力实在不行。。之前也有人说过看不懂我说的话。。

我的意思是,在一堆数据中,想提 ...

你的 意思是 上的那个 图片  只把 中华 这个企业名称提取出来?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-2 09:52:30 | 显示全部楼层
看你 另一个帖子 说了 缺失的形式不一样,
这在里 都 罗列出来,我试试看

还有 你是 CSV 格式的吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-2 09:57:10 | 显示全部楼层
13572044595 发表于 2019-4-2 09:52
看你 另一个帖子 说了 缺失的形式不一样,
这在里 都 罗列出来,我试试看

是CSV格式。
没错,缺失格式不一样的情况,我是开始先考虑把数字0,还有空白的数据,全部替换成Nan格式。
然后提取这些在指定字段中,全部是缺失值的企业。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-2 09:59:19 | 显示全部楼层
13572044595 发表于 2019-4-2 09:52
看你 另一个帖子 说了 缺失的形式不一样,
这在里 都 罗列出来,我试试看

没太搞懂。。这个CSV文件,已经用pandas打开了,变成了DataFrame格式了。这个和CSV文件应该没有关系了吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-2 10:03:10 | 显示全部楼层
老笨啊 发表于 2019-4-2 09:59
没太搞懂。。这个CSV文件,已经用pandas打开了,变成了DataFrame格式了。这个和CSV文件应该没有关系了吧 ...

CSV 是用 英文逗号 来换列, pandsa 可能是 用 \t 也就是 Tab 吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-2 10:09:12 | 显示全部楼层
13572044595 发表于 2019-4-2 10:03
CSV 是用 英文逗号 来换列, pandsa 可能是 用 \t 也就是 Tab 吧?

那就不知道了。。我预览了打开的文件,和csv文件是一样的啊,列数和行数都是一样的。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-2 11:05:30 | 显示全部楼层
能力有限,帮不了你
用 字符串的 替换 方法 试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 08:44:01 | 显示全部楼层
iwanna 发表于 2019-4-6 21:08
看不懂你的代码,一般用上了pandas很少情况下才需要使用循环,因为效率太低.大部分的循环操作可以用groupby,a ...

我的代码意思就说,对data2的企业进行遍历(比如有5家企业),再对data2的第2列字段起再次遍历,如果data2的某家企业的数据中,某列的数据均是空值,则打印该企业名称。
换句话说,就说先对企业进行分组处理,每家企业有几项考核标准,如果某家企业的某项考核标准为缺失值,则找出这家企业。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 09:06:38 | 显示全部楼层
本帖最后由 老笨啊 于 2019-4-8 09:10 编辑
iwanna 发表于 2019-4-6 21:08
看不懂你的代码,一般用上了pandas很少情况下才需要使用循环,因为效率太低.大部分的循环操作可以用groupby,a ...


我大致介绍下手头数据的情况吧。。
1. 手头数据量比较大,都是来源于不同企业不同时间段的记录数据。
2. 不同企业的所记录的数据种类不一。可能这家企业有某个类别的数据,但是另外一家企业则没有。因此,存在的情况比较多,就是某家企业可能拥有所有字段的数据,而某家企业可能只拥有部分字段的数据(其他字段的数据是缺失的)。
3. 因此,我想找出那些字段存在缺失的企业名单。主要是考虑后期的步骤(对企业进行分组,删除那些缺失的字段,然后进行标准化处理,找出异常值,并替换成缺失值,再整体对缺失值进行填充)。
也就是说,可能第一家企业存在2个字段数据的缺失,那我就对这家企业的数据,删除这两个字段。然后对剩余字段,进行标准化处理,找异常值,替换为缺失值(那些剩余的字段,其实也存在数据部分缺失的情况),我再统一进行数据的填充(这个填充必须按照企业分组来填,因为不同的企业其数据可能差别较大,分组填充比较合理)。

4. 我在处理这些数据的过程中,遇到了不少问题。。最让我头疼的就是,如何按照企业分组,分别对已经分组的数据中的缺失值,按照每个字段进行线性填充。。当然,也同样遇到了那些数据标准化时的问题,数据格式转换的问题等等。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 14:03:38 | 显示全部楼层
iwanna 发表于 2019-4-8 13:51
光是描述我的想象力有限也不知道怎么做.而且你的问题也太多了.
你能给出一部分数据吗,几10行也好,模拟下 ...

数据.zip (5 KB, 下载次数: 1)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 14:20:45 | 显示全部楼层
iwanna 发表于 2019-4-8 14:14
x2和x3均缺失的情况,你报的错就在于中间的逻辑运算符不能是or

没理解你的意思?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 15:27:07 | 显示全部楼层
iwanna 发表于 2019-4-8 14:55
你也可以按照每组的平均值来填充NaN
这里是填充了x1和x2的NaN值

我考虑过用均值来填充。。但是我观察了下数据,因为即使是同一家企业,其数据在日期上的变化,还是比较大的。。所以我才选择用线性插值,尽量和其变化规律类似。。如果用均值,就是填充的统一值,感觉偏差有些大。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 15:30:36 | 显示全部楼层
本帖最后由 老笨啊 于 2019-4-8 15:31 编辑
iwanna 发表于 2019-4-8 14:55
你也可以按照每组的平均值来填充NaN
这里是填充了x1和x2的NaN值


我目前的操作步骤是这样的:(对企业进行分组)
1. 先对无意义的数值0,替换成缺失值;
2. 对数据进行z-score标准化处理,找出异常值,也替换成缺失值;
3. 统一对数据进行缺失值填充;
4  去除原先标准化的值(因为数值填充完,标准化值应该会有一定的变化)。再次对填充后的原始数据,进行标准化处理(其中仍旧会有部分数据为异常值(z-score绝对值超过3),我选择忽视)。
5. 考虑到量纲问题,我将二次标准化的数据选为输入变量,进行建模。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 16:28:43 | 显示全部楼层
iwanna 发表于 2019-4-8 15:40
normalize主要是用在去除量纲,找异常值没必要先normalize.直接用四分位数就行吧
而且我不是给你个例子了 ...

四分位数的话,取99还是95呢?  --我之前试过用四分位去除,但是感觉数据的标准差还是很大,所以才考虑用标准化处理异常值。而且后期建模的话,也是考虑用标准化值进行建模的。
同时,我是按照SPSS的做法,用标准化处理,看绝对值超过3的话,就视为异常值。。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 16:34:41 | 显示全部楼层
iwanna 发表于 2019-4-8 15:43
线性插值是df.iterpolate.这些都是建立在你假设数据本身是线性的情况下,一般是线性的回归才用的吧
用均 ...

线性插值的参数选择有几种,nearest是找临近值,slinear是线性插值。我目前是先对时间排序,再考虑临近值插值。
用这个插值函数,我试过几次,都有问题。。之前是数百家企业在同一张表格里。不同企业之间的数据差别很大,如果用均值的话,更是不合理。。所以我之前是考虑分别针对不同企业,进行不同字段的填充。。但是折腾了很久,都没法实现。。也用到了groupby函数,不是发现填充不了,就是会报错。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 17:13:48 | 显示全部楼层
iwanna 发表于 2019-4-8 17:01
我上面那个不就是针对不同的企业进行均值填充的吗.
用四分位去除之后在标准化不就标准差不大了.用四分位 ...

我是想用python来清洗数据,然后用两种软件分别进行建模。
算是练手啊。。SPSS清洗数据的话,我不觉得有什么好的。。
而且,我目前手头的数据只是截取出来的数据,实际数据量是很大的,最好还是用python处理,方便以后自动化。。SPSS一样得编程处理。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 17:16:02 | 显示全部楼层
iwanna 发表于 2019-4-8 17:01
我上面那个不就是针对不同的企业进行均值填充的吗.
用四分位去除之后在标准化不就标准差不大了.用四分位 ...


我知道你上面是针对不同企业进行的均值填充。。我意思是即使是一家企业,其数据按照时间的变化,差别还是很大的。。所以我个人觉得用均值是不合理的。。想用插值法来填充。。。而如果用插值法的话,就没法像均值那样简单。。代码写起来也不一样。。我折腾了几天了。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-15 00:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表