我想从固定宽度的平面文件中读取数据帧。这是一个性能敏感的操作。
我希望从列值中去掉所有空格。去掉那个空格之后,我希望将空白字符串转换为NaN或None值。以下是我的两个想法:
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或者:
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的计算机,这就是为什么我不能自己测试它的原因。
发布于 2012-08-28 19:04:07
在固定宽度文件的情况下,不需要做任何特殊的事情来去除空白,或处理丢失的字段。下面是一个固定宽度文件的小示例,每列宽度为5。有尾随空格和前导空格+缺少数据。
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 float64https://stackoverflow.com/questions/12147392
复制相似问题