首页 > 解决方案 > 限制数据帧字符长度

问题描述

我有一个读取 .dat 文件的旧 Fortran 程序。我正在使用 python 来处理一些文本文件,以便它们符合 Fortran 程序的严格输入样式。

我首先导入文本文件并将其转换为数据框。现在我需要限制每列可以容纳的字符数。例如,第一列有 9 个字符,第二列有 5 个,以此类推。此外,如果数据框的一行字符少于列限制,我需要填写它以使其符合限制。例如,一列限制为 5 个字符,但第 n 行包含值 15,新值需要为 xxx15

我想做的事可能吗?任何人都可以帮忙吗?感谢:D

标签: pythonpandasdataframe

解决方案


当然,所以首先编写一个函数,该函数将接受一个字符串并对其进行编辑以满足您的列长度要求

def char_len(x, fixed_n):
    '''set string x to fixed_n character, prepend with 'xxx' if short'''
    if len(x) > fixed_n: 
        return x[:fixed_n] 
    elif len(x) < fixed_n: 
        return 'x' * (fixed_n - len(x)) + x 
    return x 

然后将函数应用于数据帧的每一列,将所需的字符长度作为第二个参数传递给我们的 char_len 函数

test_df = pd.DataFrame({'a':['a', 'abcdef'], 
    'b':['abcdefg', 'hi']})
test_df['a'] = test_df['a'].apply(lambda x: char_len(x, 5))  
test_df['b'] = test_df['b'].apply(lambda x: char_len(x, 4)) 
test_df

这假设您的列都是字符串。如果不只是强迫他们使用.astype(str)


推荐阅读