【问题标题】:read csv-data with missing values into python using pandas使用 pandas 将缺少值的 csv 数据读入 python
【发布时间】:2015-01-29 11:48:44
【问题描述】:

我有一个如下所示的 CSV 文件:

"row ID","label","val"
"Row0","5",6
"Row1","",6
"Row2","",6
"Row3","5",7
"Row4","5",8
"Row5",,9
"Row6","nan",
"Row7","nan",
"Row8","nan",0
"Row9","nan",3
"Row10","nan",

所有引用的条目都是字符串。未引用的条目是数字的。空字段是缺失值 (NaN),带引号的空字段仍应视为空字符串。 我试图用 pandas read_csv 读入它,但我无法让它按照我想要的方式工作......它仍然认为 ,"" 和 , 作为 NaN,而第一个不是这样。

d = pd.read_csv(csv_filename, sep=',', keep_default_na=False, na_values=[''], quoting = csv.QUOTE_NONNUMERIC)

有人可以帮忙吗?有可能吗?

【问题讨论】:

    标签: python csv pandas missing-data


    【解决方案1】:

    您可以尝试使用numpy.genfromtxt 并指定missing_values 参数

    http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html

    【讨论】:

    • 你能帮我吗?我试过: d = np.genfromtxt('test.csv', delimiter = ',', missing_values = [], names = True, dtype=[('row_ID', np.dtype(str)), ('label' , np.dtype(str)), ('val', np.dtype(float))]) 但它为所有 (!) 字符串列值返回空字符串。不知道怎么回事……
    【解决方案2】:

    可能是这样的:

    import pandas as pd
    import csv
    import numpy as np
    d = pd.read_csv('test.txt', sep=',', keep_default_na=False, na_values=[''], quoting = csv.QUOTE_NONNUMERIC)
    mask = d['label'] == 'nan'
    d.label[mask] = np.nan
    

    【讨论】:

    • 但我想保留 'nan' 和 '' 作为字符串而不是缺失值
    【解决方案3】:

    我找到了一种方法让它或多或少地工作。我只是不知道,为什么我需要指定 dtype=type(None) 才能让它工作......非常欢迎对这段代码发表评论!

    import re
    import pandas as pd
    import numpy as np
    
    # clear quoting characters
    def filterTheField(s):
        m = re.match(r'^"?(.*)?"$', s.strip())
        if m:
            return m.group(1)
        else:
            return np.nan
    
    file = 'test.csv'
    
    y = np.genfromtxt(file, delimiter = ',', filling_values = np.nan, names = True, dtype = type(None), converters = {'row_ID': filterTheField, 'label': filterTheField,'val': float})
    
    d = pd.DataFrame(y)
    
    print(d)
    

    【讨论】:

      猜你喜欢
      • 2020-12-30
      • 2018-07-07
      • 2023-03-11
      • 2012-09-12
      • 2018-02-23
      • 1970-01-01
      • 2021-02-03
      • 2021-06-05
      相关资源
      最近更新 更多