首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在执行转换器函数之后,read_fwf()/read_csv()/read_table()中的na_values是否会被转换?

在执行转换器函数之后,read_fwf()/read_csv()/read_table()中的na_values是否会被转换?
EN

Stack Overflow用户
提问于 2012-08-28 02:22:33
回答 1查看 496关注 0票数 0

我想从固定宽度的平面文件中读取数据帧。这是一个性能敏感的操作。

我希望从列值中去掉所有空格。去掉那个空格之后,我希望将空白字符串转换为NaNNone值。以下是我的两个想法:

代码语言:javascript
复制
pd.read_fwf(path, colspecs=markers, names=columns,
            converters=create_convert_dict(columns))

def create_convert_dict(columns):
    convert_dict = {}
    for col in columns:
        convert_dict[col] = null_convert
        return convert_dict

def null_convert(value):
    value = value.strip()
    if value == "":
        return None
    else:
        return value

或者:

代码语言:javascript
复制
pd.read_fwf(path, colspecs=markers, names=columns, na_values='',
            converters=create_convert_dict(columns))

def create_convert_dict(columns):
    convert_dict = {}
    for col in columns:
        convert_dict[col] = col_strip
    return convert_dict

def col_strip(value):
    return value.strip()

第二个选项取决于在na_values之前评估的转换器(去掉空格)。

我想知道第二个能不能用。我感到好奇的原因是,保留具有Null值的NaN似乎比没有更好。

对于如何执行此操作,我也愿意接受任何其他建议(去掉空格,然后将空白字符串转换为NaN)。

我目前无法访问安装了pandas的计算机,这就是为什么我不能自己测试它的原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-28 19:04:07

在固定宽度文件的情况下,不需要做任何特殊的事情来去除空白,或处理丢失的字段。下面是一个固定宽度文件的小示例,每列宽度为5。有尾随空格和前导空格+缺少数据。

代码语言:javascript
复制
In [57]: data = """\
A    B     C     
 0    foo       
3    bar     2.0
  1        3.0
"""

In [58]: df = pandas.read_fwf(StringIO(data), widths=[5, 5, 5])

In [59]: df
Out[59]: 
   A    B   C
0  0  foo NaN
1  3  bar   2
2  1  NaN   3

In [60]: df.dtypes
Out[60]: 
A      int64
B     object
C    float64
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12147392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档