【问题标题】:Recognizing missing values and return a list with these values识别缺失值并返回包含这些值的列表
【发布时间】:2018-04-13 13:04:11
【问题描述】:

我对编码很陌生,最近我在工作中完成了一个非常小的 Pandas 课程,这门课程的一部分是考虑一个我们想要改进的项目。我希望能够从 CSV 或 Excel 文件中识别表中的缺失值,然后列出这些缺失值。 导入的 CSV 文件示例:

公司 2016 2015 2014 2013 2012 2011 2010

AAPL 美国 31 NaN 21.0 3.0 NaN 80.0 7

MSFT 美国 72 8.0 67.0 NaN 93.0 30.0 37

SNAP US 51 NaN NaN 7.0 33.0 16.0 44

FB US 49 56.0 33.0 97.0 NaN NaN 98

进入:

美国苹果公司,2015 年,2012 年

MSFT 美国,2013 年

SNAP 美国,2015 年,2014 年

FB 美国,2012 年,2011 年

我知道如何计算它们等等,但我想看到一个最终的列表。

谢谢!

【问题讨论】:

    标签: python excel pandas csv


    【解决方案1】:

    首先set_index,通过isnull检查NaNs,最后通过apply生成lists,并进行过滤:

    df = (df.set_index('Company')
            .isnull()
            .apply(lambda x : x.index[x].tolist(), 1)
            .reset_index(name='val'))
    print (df)
       Company           val
    0  AAPL US  [2015, 2012]
    1  MSFT US        [2013]
    2  SNAP US  [2015, 2014]
    3    FB US  [2012, 2011]
    

    或者如果想要strings:

    df = df.set_index('Company')
    s = np.where(df.isnull(), ['{}, '.format(x) for x in df.columns], '')
    df = pd.Series([''.join(x).strip(', ') for x in s], index=df.index).reset_index(name='val')
    print (df)
       Company         val
    0  AAPL US  2015, 2012
    1  MSFT US        2013
    2  SNAP US  2015, 2014
    3    FB US  2012, 2011
    

    【讨论】:

    • 谢谢!我偶然发现了另一个问题;当我的月经从每年(2016 年)到“2016 年第一季度”时,我得到一个错误。有没有办法解决这个问题,或者我需要清理数据,例如“2016 1”?
    • 我认为如果需要将 periodindex 转换为字符串需要df.columns = df.columns.strftime('%Y %q')
    猜你喜欢
    • 2018-12-06
    • 2018-10-18
    • 1970-01-01
    • 2014-06-13
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多