python - 限制数据帧字符长度
问题描述
我有一个读取 .dat 文件的旧 Fortran 程序。我正在使用 python 来处理一些文本文件,以便它们符合 Fortran 程序的严格输入样式。
我首先导入文本文件并将其转换为数据框。现在我需要限制每列可以容纳的字符数。例如,第一列有 9 个字符,第二列有 5 个,以此类推。此外,如果数据框的一行字符少于列限制,我需要填写它以使其符合限制。例如,一列限制为 5 个字符,但第 n 行包含值 15,新值需要为 xxx15
我想做的事可能吗?任何人都可以帮忙吗?感谢:D
解决方案
当然,所以首先编写一个函数,该函数将接受一个字符串并对其进行编辑以满足您的列长度要求
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)
推荐阅读
- r - 为什么我不能在 R 中使用 apply 函数将 .rda 文件加载到 R 工作区?
- python - 'Student' 对象没有属性 'print_details'
- c# - 在加载 aspx 页面时显示加载图像和文本
- ruby-on-rails - Rails 5 控制台查询来计算数据库中的所有记录?
- flutter - 在颤动中获取不同位置的当地时间
- c# - 为什么使用 IAsyncEnumerable 比返回异步/等待任务慢
? - r - 小鼠的 pool.compare 为 lmerTest 模型提供“错误:类调用对象的无一目了然方法”
- python - Python 3.6 无法导入 gnuradio (3.7.9)
- c# - 如何在摘要中包含强类型泛型的“查看”参考?
- karate - 是否可以在要断言的请求中提取其中一个键值对的值