精华内容
下载资源
问答
  • 如何用“先前的非空值填充稀疏数据集的单元格? 问题 这个问题真的很简单, 在这个问题中我将重用Stack Overflow用户aljassi提供的示例 : 我们有一个包含“稀疏”数据的表: Col1 Col2 Col3 Col4 ---------...

    sql填充空值

    以下是所有与数据相关的技术中的一个非常普遍的问题,我们将针对这两个非常精简的基于SQL的解决方案进行研究:

    如何用“先前的非空值”填充稀疏数据集的单元格?

    问题

    这个问题真的很简单, 在这个问题中我将重用Stack Overflow用户aljassi提供的示例

    我们有一个包含“稀疏”数据的表:

    Col1  Col2  Col3  Col4
    ----------------------
    A     0     1     5
    B     0     4     0
    C     2     0     0
    D     0     0     0
    E     3     5     0
    F     0     3     0
    G     0     3     1
    H     0     1     5
    I     3     5     0

    上面的数据集包含一些非零的有趣数据点,以及一些由零值建模的间隙。 在其他示例中,我们可以将零替换为NULL ,但这仍然是相同的问题。 所需的结果如下:

    Col1  Col2  Col3  Col4
    ----------------------
    A     0     1     5
    B     0     4     5
    C     2     4     5
    D     2     4     5
    E     3     5     5
    F     3     3     5
    G     3     3     1
    H     3     1     5
    I     3     5     5

    请注意,所有生成的值都以红色突出显示,并且它们对应于最新的蓝色值。

    如何使用SQL? 我们将研究两种解决方案:

    使用窗口函数的解决方案

    这是您应该寻找的解决方案,并且在链接的堆栈溢出问题中有两个答案都使用了窗口函数:

    两种解决方案大致相同。 它们的工作方式如下(使用Oracle语法):

    WITH t(col1, col2, col3, col4) AS (
      SELECT 'A', 0, 1, 5 FROM DUAL UNION ALL
      SELECT 'B', 0, 4, 0 FROM DUAL UNION ALL
      SELECT 'C', 2, 0, 0 FROM DUAL UNION ALL
      SELECT 'D', 0, 0, 0 FROM DUAL UNION ALL
      SELECT 'E', 3, 5, 0 FROM DUAL UNION ALL
      SELECT 'F', 0, 3, 0 FROM DUAL UNION ALL
      SELECT 'G', 0, 3, 1 FROM DUAL UNION ALL
      SELECT 'H', 0, 1, 5 FROM DUAL UNION ALL
      SELECT 'I', 3, 5, 0 FROM DUAL
    )
    SELECT
      col1,
    
      nvl(last_value(nullif(col2, 0)) 
          IGNORE NULLS OVER (ORDER BY col1), 0) col2,
    
      nvl(last_value(nullif(col3, 0)) 
          IGNORE NULLS OVER (ORDER BY col1), 0) col3,
    
      nvl(last_value(nullif(col4, 0)) 
          IGNORE NULLS OVER (ORDER BY col1), 0) col4
    FROM t

    现在,让我们分解这些窗口函数:

    NULLIF(colx,0)

    只要我们在数据集中有一个可接受的“空”值,这就是产生NULL值的一种简单方法。 因此,我们得到的不是NULL而是零。 将此功能应用于我们的数据,我们得到:

    Col1  Col2  Col3  Col4
    ----------------------
    A     NULL  1     5
    B     NULL  4     NULL
    C     2     NULL  NULL
    D     NULL  NULL  NULL
    E     3     5     NULL
    F     NULL  3     NULL
    G     NULL  3     1
    H     NULL  1     5
    I     3     5     NULL

    之所以这样做,是因为现在我们可以利用一些排名函数可以使用的有用的IGNORE NULLS子句,特别是LAST_VALUE()LAG() 我们现在可以写:

    last_value(...) IGNORE NULLS OVER (ORDER BY col1)

    在按col1对行进行排序时,我们取当前行之前的最后一个非NULL值:

    • 如果当前行包含非NULL值,那么我们将使用该值。
    • 如果当前行包含NULL值,那么我们将“向上”运行,直到达到非NULL
    • 如果我们要“向上”并且没有达到任何非NULL值,那么我们得到NULL

    这导致以下结果:

    Col1  Col2  Col3  Col4
    ----------------------
    A     NULL  1     5
    B     NULL  4     5
    C     2     4     5
    D     2     4     5
    E     3     5     5
    F     3     3     5
    G     3     3     1
    H     3     1     5
    I     3     5     5

    请注意,对于大多数窗口函数,一旦指定了ORDER BY子句,则将以下frame子句用作默认值:

    last_value(...) IGNORE NULLS OVER (
      ORDER BY col1
      ROWS BETWEEN UNBOUNDED PRECEEDING AND CURRENT ROW
    )

    有很多关键字,但是一旦您掌握了很多窗口函数,它们的含义就不会那么晦涩难懂了。 我们建议阅读以下博客文章以了解有关它们的更多信息:

    最后,由于我们不希望这些NULL值保留在结果中,因此我们只需使用NVL() (或其他数据库中的COALESCE()将其删除:

    nvl(last_value(...) IGNORE NULLS OVER (...), 0)

    很简单,不是吗? 请注意,在这种特殊情况下, LAG()LAST_VALUE()将具有相同的效果。

    使用MODEL子句的解决方案

    每当您在(Oracle)SQL中遇到问题时,使用窗口函数开始变得难以解决时,Oracle MODEL子句可能会为其提供“简便”的解决方案。 我在“ easy”上使用了引号,因为语法有点难以记住,但是其本质确实并不那么难。

    MODEL子句不过是一种Oracle专用的方言,用于在数据库中实现类似电子表格的逻辑。 我强烈建议阅读Oracle的相关白皮书,该白皮书很好地解释了该功能:

    这是您可以使用MODEL解决问题的方法(并忍受):

    WITH t(col1, col2, col3, col4) AS (
      SELECT 'A', 0, 1, 5 FROM DUAL UNION ALL
      SELECT 'B', 0, 4, 0 FROM DUAL UNION ALL
      SELECT 'C', 2, 0, 0 FROM DUAL UNION ALL
      SELECT 'D', 0, 0, 0 FROM DUAL UNION ALL
      SELECT 'E', 3, 5, 0 FROM DUAL UNION ALL
      SELECT 'F', 0, 3, 0 FROM DUAL UNION ALL
      SELECT 'G', 0, 3, 1 FROM DUAL UNION ALL
      SELECT 'H', 0, 1, 5 FROM DUAL UNION ALL
      SELECT 'I', 3, 5, 0 FROM DUAL
    )
    SELECT * FROM t
    MODEL
      DIMENSION BY (row_number() OVER (ORDER BY col1) rn)
      MEASURES (col1, col2, col3, col4)
      RULES (
        col2[any] = DECODE(col2[cv(rn)], 0, NVL(col2[cv(rn) - 1], 0), col2[cv(rn)]),
        col3[any] = DECODE(col3[cv(rn)], 0, NVL(col3[cv(rn) - 1], 0), col3[cv(rn)]),
        col4[any] = DECODE(col4[cv(rn)], 0, NVL(col4[cv(rn) - 1], 0), col4[cv(rn)])
      )

    这里有三个有趣的子句:

    DIMENSION BY子句

    就像在Microsoft Excel电子表格中一样, DIMENSION对应于每个电子表格单元格的连续,不同的索引,我们要通过该索引来访问该单元格。 在Excel中,总是有两个维(一个维用字母A..Z,AA..ZZ,…书写),另一个维用数字(1..infinity)书写。

    使用MODEL ,您可以指定任意多个尺寸。 在我们的示例中,我们将只使用一个,即每行的行号,该行号由col1排序(窗口函数的另一种用例)。

    MEASURES子句

    MEASURES子句为每个“单元”指定单独的单元值。 在Microsoft Excel中,一个单元格只能有一个值。 在Oracle的MODEL子句中,我们可以在一个“单元格”中一次处理多个值。

    在这种情况下,我们将所有列都设为单元格。

    RULES子句

    这是MODEL子句中真正有趣的部分。 在这里,我们指定要根据哪些规则来计算每个单个单元格的值。 语法很简单:

    RULES (
      <rule 1>,
      <rule 2>,
      ...,
      <rule N>
    )

    每个单独的规则都可以实现以下形式的分配:

    RULES (
      cell[dimension(s)] = rule
    )

    在我们的例子中,我们将对单元格col2col3col4以及维度rn任何值(对于行号)重复相同的规则。 因此,作业的左侧是

    RULES (
      col2[any] = rule,
      col3[any] = rule,
      col4[any] = rule,
    )

    右侧是一个平凡的(但看起来不平凡的)表达:

    DECODE(col2[cv(rn)], 0, NVL(col2[cv(rn) - 1], 0), col2[cv(rn)])

    让我们再次分解。

    解码

    DECODE是一个简单实用的Oracle函数,它接受第一个参数,将其与参数2进行比较,如果它们相同,则返回参数3,否则返回参数4。它的作用类似于CASE ,有点冗长:

    DECODE(A, B, C, D)
    
    -- The same as:
    
    CASE A WHEN B THEN C ELSE D END

    简历(rn)

    cv()是特定于MODEL “函数”,表示“当前值”。 在赋值的左侧,我们使用"any"作为维度说明符,因此我们将此规则应用于rn “ any”值。 为了访问特定的rn值,我们只需编写cv(rn)或“ rn的当前值”。

    递归性

    允许MODEL子句的RULES跨越一棵递归树(尽管不是图,所以不允许循环),其中每个单元格都可以基于前一个单元格进行定义,而前一个单元格又是基于其前身定义的。 我们通过col2[cv(rn) - 1] ,其中cv(rn) - 1表示“当前行号减一”。

    容易吧? 授予。 语法不是简单明了的,我们只是在摸索MODEL可能的表面。

    结论

    SQL提供了一些很酷的方法来实现数据驱动的,声明性的数据规范。 MODEL子句有点怪异,但同时功能非常强大。 窗口函数要容易得多,也要快一些。窗口函数应该是每个使用SQL的开发人员的工具链中的工具。

    在本文中,我们展示了如何使用窗口函数或MODEL填补稀疏数据中的空白。 一个类似的用例是运行总计。 如果本文引起了您的兴趣,建议您阅读有关SQL中计算运行总计的不同方法

    翻译自: https://www.javacodegeeks.com/2015/12/fill-sparse-data-previous-non-empty-value-sql.html

    sql填充空值

    展开全文
  • 通过fillna可以对dataframe的每个列的空值进行填充,下面是一个列子,用来填充df5的所有空值。 $ df5.na.fill(False).show() +----+-------+-----+ | age| name| spy| +----+-------+-----+ | 10| Alice|false| | 5|...

    有时我们需要对spark的dataframe的空值列进行填充,本文介绍几种可以用于填充空值的方法。

    全域填充

    通过fillna可以对dataframe的每个列的空值进行填充,下面是一个列子,用来填充df5的所有空值。

    $ df5.na.fill(False).show()
    +----+-------+-----+
    | age|   name|  spy|
    +----+-------+-----+
    |  10|  Alice|false|
    |   5|    Bob|false|
    |null|Mallory| true|
    +----+-------+-----+
    

    同一个值填充多个列

    通过设置fill的subset,可以一次指定多个列来进行填充。代码如下:

    df  = spark.createDataFrame([[1,2,"name1"], 
                                                    [None,2,None], 
    											    [3,None,"name3"]], ["id", "id2", "name"])
    # 填充一个值,一次指定多个列
    df2 = df.na.fill(0, subset=['id', 'id2'])
    df2.show()
    

    每列指定不同的填充值

    通过字典的参数,可以指定每个列的填充值,代码(python)如下:

    df  = spark.createDataFrame([[1,2,"name1"], 
                                                    [None,2,None], 
    											    [3,None,"name3"]], ["id", "id2", "name"])
    # 通过字典指定
    df1 = df.na.fill({'id': 0, 'id2': 0, 'name': 'unknown'})
    df1.show()
    

    小结

    本文介绍了填充dataframe空值的几种方式。

    展开全文
  • 在处理数据时,常常会遇到有很多空值的情况,且这些空值比较分散,没有规律性,那如何批量将空值填充为所需要的数值呢?【例】比如这样一张数据表,如何将表格中的空值批量填充为0呢?1、首先,选择开始菜单--查找和...

    在处理数据时,常常会遇到有很多空值的情况,且这些空值比较分散,没有规律性,那如何批量将空值填充为所需要的数值呢?

    【例】比如这样一张数据表,如何将表格中的空值批量填充为0呢?

    a6696fece8431a2d3c636d8c560102e8.png

    1、首先,选择开始菜单--查找和替换--定位条件,或者直接同时按下Ctrl+G,弹出如下定位窗口:

    663ba498c60fee057a28f863c895504a.png

    2、然后点击选择定位条件为“空值”,点击“定位”,如下图所示:

    cbfb778d052f5566c89e4a3d5abf44e6.png

    此时,所有的空值就都被定位到了:

    0aeaf5afada74657e24e35e73854fe6b.png

    3、接着输入数字“0”,再同时按下Ctrl+Enter键,即可将所有定位到的空值填充为“0”。

    16f43426d0f60e9e502754336aa2d9f8.png

    27b5622738c94f36e15aa928e3421ec1.png

    举一反三,除了批量将空值填充为“0”,也可以根据实际需要填充值,方法是一样的。【例】下表为三家门店12月1号到5号的销售额,如何将2号到5号门店列的空值进行填充呢?

    a42595e2fcf759caeaf1d266cf602bf9.png

    1、首先,用Ctrl+G定位空值:

    f8bb186dadc1f5faa268f71e6bd72087.png

    2、然后输入“=B2”,B2单元格即“朝阳店”:

    641e037733d27f3b53feb1515c4950b1.png

    3、同时按下Ctrl+Enter,即可完成填充,结果如下:

    2e42b43df432d45fc36338bab80190d8.png

    就是这么简单,你学会了吗?

    -END-

    欢迎转载,转载时请注明来源

    5326750720e85e8c84e0bbe43c7030be.png

    展开全文
  • 在处理数据时,常常会遇到有很多空值的情况,且这些空值比较分散,没有规律性,那如何批量将空值填充为所需要的数值呢?【例】比如这样一张数据表,如何将表格中的空值批量填充为0呢?1、首先,选择开始菜单--查找和...

    9e213b97fa3692023e0ebb9f451c2b42.png

    在处理数据时,常常会遇到有很多空值的情况,且这些空值比较分散,没有规律性,那如何批量将空值填充为所需要的数值呢?

    【例】比如这样一张数据表,如何将表格中的空值批量填充为0呢?

    0b4379f41b4bd1be3621b8e1f0d3b860.png

    1、首先,选择开始菜单--查找和替换--定位条件,或者直接同时按下Ctrl+G,弹出如下定位窗口:

    6699d8458c9e3e96b1601db4b8f5feca.png

    2、然后点击选择定位条件为“空值”,点击“定位”,如下图所示:

    b617ccf18be09bd56316230c2b8b3251.png

    此时,所有的空值就都被定位到了:

    ac3f994f6cbb8751518e7767dd1e3c56.png

    3、接着输入数字“0”,再同时按下Ctrl+Enter键,即可将所有定位到的空值填充为“0”。

    bdb9ce8458622dd47b9e75aaea9d526b.png

    65bdd5ca9cb5e41bd6a736f04cc353dc.png

    举一反三,除了批量将空值填充为“0”,也可以根据实际需要填充值,方法是一样的。【例】下表为三家门店12月1号到5号的销售额,如何将2号到5号门店列的空值进行填充呢?

    8db10d741b49978e14514d3230a38686.png

    1、首先,用Ctrl+G定位空值:

    ec8598aae8bffe2ba973f822491c0dad.png

    2、然后输入“=B2”,B2单元格即“朝阳店”:

    46ead8e870408e7ac6ca4de72567947f.png

    3、同时按下Ctrl+Enter,即可完成填充,结果如下:

    32a196bbf314872a40244ab5ecc55642.png

    就是这么简单,你学会了吗?

    来源: 办税服务中心。仅供参考不作其它用途。

    展开全文
  • 如何用“先前的非空值填充稀疏数据集的单元格? 问题 这个问题真的很简单, 在这个问题中我将重用Stack Overflow用户aljassi提供的示例 : 我们有一个包含“稀疏”数据的表: Col1 Col2 Col3 Col4 ---------...
  • 今天小编为大家带来在numpy中如何设置空值的办法,下面一起来看看吧。我不明白为什么我会以0而不是不满足条件的空值空值结尾... b是一个用0和1值填充的numpy数组,c是另一个完全填充的numpy数组。所有阵列均为71x...
  • 数据库中没有的值分为这么几种:1.NULL 如果看上去单元格是空白的,那就是NULL值.2.0 偶尔一些单元格会默认为...本人就遇到过一次,在代码中,所有为空的值都用null填充,本意是填充为NULL,结果最后都成了'null',就是四个...
  • 数据库中没有的值分为这么几种: 1.NULL 如果看上去单元格是空白的,那就是NULL值.2.0 偶尔一些单元格会默认为'0...本人就遇到过一次,在代码中,所有为空的值都用null填充,本意是填充为NULL,结果最后都成了'null',就是...
  • 3.这时所有空值的单元格会显示为选中状态,如图序号列是从A2开始,则直接输入公式为:“ =A2 ” ,输入完成后按下“Ctrl+Enter”快捷键,即可自动填充所有空值单元格。 【注:有时候会提示“未找到...
  • 在Execl操作中经常遇到类似于如下图情况,希望可以根据第一个数据将以下的空白单元格填充为相同内容,数据量小还好可以ctrl+c/v解决,但是数据量一大,就会耗费大量的时间去进行数据处理 那么,具体操作如何呢? 1....
  • 今天小编为大家带来在numpy中如何设置空值的办法,下面一起来看看吧。我不明白为什么我会以0而不是不满足条件的空值空值结尾... b是一个用0和1值填充的numpy数组,c是另一个完全填充的numpy数组。所有阵列均为71x...
  • 文章目录1.如何检测缺失值: df.isna() 和 df.notna()2....所有空值的总和等于0,所有空值的连乘等于17.分组运算中直接排除NaN这一组8.对空值进行填充:fillna() 1.如何检测缺失值: df.isna() 和 df.notna() In [6]:...
  • 问题:例如在自己制作了成对的输入(input256×256 target 200×256)后,如何让输入图像和输出图像分辨率不一致,例如成对图像中:input的分辨率是256×256, output 和target都是200×256,需要修改哪里的参数。...
  • 今天小编为大家带来在numpy中如何设置空值的办法,下面一起来看看吧。我不明白为什么我会以0而不是不满足条件的空值空值结尾... b是一个用0和1值填充的numpy数组,c是另一个完全填充的numpy数组。所有阵列均为71x...
  • excel使用小技巧.docx

    2020-07-10 12:15:58
    5. 填充合并单元格,选中区域,取消合并单元格,CTRL+G定位空值,=+向上的箭头,然后按CTRL+enter 例如:华中生产-华中GIS-华中规划 6. 如何快速拆分日期,第一行输入然后下一行按CTRL+E 如:开始结束日期输入在一个...
  • 1 如何快速删除空白行打开excel,选中要删除空白行的列开始-查找和选择-定位条件选择空值,可以选中当前列下的所有空白格右键删除,选择删除整行,搞定2 表格的下列列表数据-数据验证-允许,选择下拉列表,可以输入...
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    76 <br>0111 计算字符串中子字符串出现的次数 76 <br>0112 获得字符串中大写字母的个数 77 <br>0113 获得某字符在字符串中最后出现的位置 78 <br>0114 如何找出字符串中某一字符的所有位置 78...
  • 如何测试该字段不是空值呢? 我想让程序显示一个提示:用户已经完全填充所有字段,但是下面这段代码还会显示其他情况,比如name值为null, number有值的情况。 public void onClick(View arg0) { switch...
  • Oracle_Database_11g完全参考手册.part1/3

    热门讨论 2012-08-18 17:29:13
    《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...
  • 【自动填充】 不同于EXCEL的CTRL+D功能,能对选中的某列数据不同存储格区域的空白处,取相邻的上一不为空的存储格内容同时作数据源的自动填充。1分钟内能处理手工需几小时才能完成的几万行ERP或KingDee原始数据。...
  •  本书全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有新增功能和工具,如何执行功能强大的SQL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象-关系数据库。通过学习本书,您可以...
  • 1.1.6 要点6:ASP.NET支持所有的浏览器 1.1.7 要点7:ASP.NET易于部署和配置 1.2 ASP.NET的演变 1.2.1 ASP.NET1.0和ASP.NET1.1 1.2.2 ASP.NET2.0 1.2.3 ASP.NET3.5 1.2.4 ASP.NET4 1.2.5 ...
  • asp.net知识库

    2015-06-18 08:45:45
    如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/...
  • 1.1.6 要点6:asp.net 支持所有的浏览器 8 1.1.7 要点7:asp.net 易于部署和配置 8 1.2 asp.net 的演变 9 1.2.1 asp.net 1.0 和asp.net1.1 9 1.2.2 asp.net 2.0 9 1.2.3 asp.net 3.5 10 1.2.4 asp.net 4...
  • MAPGIS地质制图工具

    2013-05-06 16:15:30
    若事先未打开Excel,那么将会把选择的表(Sheet)中的所有数据(直到最后为空值行;有空数据行但下面仍有数据行,继续插入数据;有引用公式当做有数据)转到MapGis里面; 2、如果需要把Excel中的线也输入到MapGis中,...
  •  删除HKEY_CURRENT_USER/SOFTWARE/Microsoft/windows/CurrentVersion/Explorer/MenuOrder/Start Menu/Programs中所有以oracle 开头的键。  删除HKDY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI中除Microsoft ...
  • table有一个rows集合,包括了table的所有tr(包括thead和tfoot里面的)。 程序的Clone方法会根据其参数克隆对应索引的tr: this._index = Math.max(0, Math.min(this._oTable.rows.length - 1, isNaN(index) ? this...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

如何填充所有空值