【问题标题】:Check the missing value in an excel table检查excel表格中的缺失值
【发布时间】:2019-12-01 22:10:38
【问题描述】:

我正在处理我的数据可视化任务。首先,我必须检查我找到的数据集,并在必要时进行数据整理。这些数据由马德里的几个空气质量颗粒指数组成,这些数据是由不同的站点收集的。

我发现表格中缺少一些值。如何通过工具(python 或 R 或​​ Tableau)快速检查这些缺失值并替换这些值?

【问题讨论】:

  • 你想用什么替换它们?
  • 在 R 中,读取数据时最容易做到这一点 - 如果您有其他值,请使用 data <- read.csv("data.csv", header = T, na.strings = c("")) 之类的值,因为 NA 已经像这样在 na.strings 调用中添加这些值(使用 NA 作为例如)na.strings = c("", "NA")
  • 顺便问一下,你认为应该用什么值来替换?与上一小时的数字相同,还是获得上一小时和下一小时之间的平均值?

标签: python r tableau-api


【解决方案1】:

在 Python 中,您可以使用 pandas 模块将 Excel 文件加载为DataFrame。发布这个,很容易替换NaN/缺失值。 假设您的 excel 名为 madrid_air.xlsx

    import pandas as pd
    df = pd.read_excel('madrid_air.xlsx')

发布此消息后,您将拥有他们所谓的DataFrame,它由 excel 文件中的数据组成,采用相同的表格格式,带有列名和索引。在 DataFrame 中,缺失值将作为 NaN 值加载。所以为了得到包含NaN值的行,

     df_nan = df[df.isna()]

df_nan 将包含其中包含 NaN 值的行。

现在,如果您想用 0 填充所有这些 NaN 值。

     df_zerofill = df.fillna(0)

df_zerofill 会将整个 DataFrame 中的所有 NaNs 替换为 0。

为了专门填充列,请使用列名。

    df[['NO','NO_2']] = df[['NO','NO_2']].fillna(0)

这将用 0 填充 NONO_2 列的缺失值。

阅读更多关于DataFrame的信息:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html

DataFrames 中阅读有关处理缺失数据的更多信息:https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html

【讨论】:

  • 所以如果我想用与上一小时相同的数字替换那些 NaN,怎么办?谢谢
  • @Jennifer Chen 使用 df.fillna(method='pad')。在这种情况下,将使用列中的先前值。如果第一个和第二个值是NaNs,那么第二个值不会有任何变化。
  • 您认为有必要在创建模型之前替换这些值吗?由于观察机器或其他原因,可能会丢失一些 NaN。
  • 您是否尝试使用此数据集构建模型?它没有抛出错误吗?此外,是否需要替换 NaN 值取决于数据集。如果您有一个庞大的数据集,有时可以删除包含NaN 值的整行。有时您将不得不更换它们。但大部分时间保持原样会引发NaN 错误。
  • 我的导师建议我的案子可以用ARIMA做,我还没有开始,只是想着之前的数据争吵。这是我的数据集来自的网站,kaggle.com/decide-soluciones/air-quality-madrid。得到了18张表,我发现连续几个小时还是有大量的缺失值,比如从早上0点到早上10点,所有的索引数字都缺失了。
【解决方案2】:

python 有几个库可以处理 excel 电子表格。我最喜欢的是openpyxl。它将电子表格转换为数据框,然后您可以在其中通过坐标来处理特定字段。非常方便的是它还可以识别行和列的标签。当然你也可以更新你的表格 用它。但要小心,如果您使用损坏的代码,您的 xlsx 文件可能会永久损坏

编辑1:

import openpyxl

wb = openpyxl.load_workbook('filename.xlsx')
# if your worksheet is the first one in the workbook
ws = wb.get_sheet_names(wb.get_sheet_by_name()[0])

for row in ws.iter_rows('G{}:I{}'.format(ws.min_row,ws.max_row)):
    for cell in row:
        if cell.value is None:
           cell.value = 0 

【讨论】:

    【解决方案3】:

    好吧,在 Tableau 中,您可以创建一个工作表,将维度表(蓝色药丸)中粒度的最低级别拖放到其中,并将列(作为度量)放在同一个图表中。

    如果您的表是真正的原子表,那么您将在右下角的工作表中得到一个响应,告诉您有关空值的信息。单击它可以清除或替换工作簿数据中的这些特定值。

    澄清一下,它不是“hi end”和编码方式,而是最简单的一种。

    PS:您还可以通过“null”值过滤列来检查Tableau的数据输入窗口中的缺失值。

    PS2:如果你想动态改变它,你需要使用如下公式:

    IF ISNULL(Measure1) 
    THEN (Measure2) ˜ OR Another Formula
    ELSE null 
    END 
    

    【讨论】:

      猜你喜欢
      • 2013-08-08
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多