python - 使用正则表达式或常规 Python 进行字符串替换?

标签 python regex python-3.x pandas csv

我有一个如下所示的字符串列表

orig = ["a1  2.3  ABC  4  DEFG  567  b890",
        "a2  3.0  HI  4  5  JKL  67  c65",
        "b1  1.2  MNOP  3  45  67  89  QR  987  d64  e112"]

这里的上下文是,这是一个 CSV 文件,并且省略了某些列。我认为 pandas csv 阅读器无法处理这些情况。现在的想法是为缺失值注入(inject) na ,因此输出变为

corr = ["a1  2.3  ABC  4  na  na  na  DEFG  567  b890",
        "a2  3.0  HI  4  5  na  na  JKL  67  c65",
        "b1  1.2  MNOP  3  45  67  89  QR  987  d64  e112"]

稍后在导入 pandas 时将第二列与大写单词对齐。

结构如下:列之间的分隔符是两个或多个空格,两个大写列之间必须有四个值。在原始文件中,始终只有两个大写列,它们之间至少有 1 个、最多 4 个数字,并且这些大写单词之间只有数值。
我可以毫无问题地用原生 Python 编写脚本,所以请不要对此提出建议。但我想,这可能是正则表达式的情况。作为正则表达式初学者,我只能使用

提取两个大写列之间的字符串
for line in orig:
    a = re.findall("([A-Z]+[\s\d]+[A-Z]+)", line))
    print(a)
>>>'ABC  4  DEFG' #etc pp

正则表达式中现在是否有一种简单的方法来确定大写单词之间有多少个数字并插入“na”值以使其之间始终有四个值?或者我应该用原生 Python 来做?

当然,如果有办法用 pandas csv reader 来做到这一点,那就更好了。但我研究了pandas csv_reader docs并没有发现任何有用的东西。

最佳答案

基于完整的 pandas 方法拆分和连接可能会有所帮助,即

ndf = pd.Series(orig).str.split(expand=True)

#   0    1     2  3     4    5     6     7     8     9     10
#0  a1  2.3   ABC  4  DEFG  567  b890  None  None  None  None
#1  a2  3.0    HI  4     5  JKL    67   c65  None  None  None
#2  b1  1.2  MNOP  3    45   67    89    QR   987   d64  e112

df = pd.concat([ndf.iloc[:,:4], ndf.iloc[:,4:].apply(sorted,key=pd.notnull,axis=1)],1)

df.astype(str).apply(' '.join,axis=1).tolist()

['a1 2.3 ABC 4 None None None None DEFG 567 b890',
 'a2 3.0 HI 4 None None None 5 JKL 67 c65',
 'b1 1.2 MNOP 3 45 67 89 QR 987 d64 e112']

关于python - 使用正则表达式或常规 Python 进行字符串替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48476521/

相关文章:

python - 100% CPU 使用率,正则表达式取决于输入长度

javascript - 正则表达式匹配字符串格式为 @ 或 # 后跟点分隔的字符串,不包含空格

python-3.x - Python 海象运算符在范围内失败

python - 如何更快地获取基于 pandas Dataframe 给定值的列?

python - 使用某些参数绘制误差函数

ruby-on-rails - 什么是自动修复英语语法的 Rails 插件或 Ruby gem?

python - plotly :如何防止标题与 plotly 重叠?

python-3.x - 可视化使用 SpaCy 中的预训练词嵌入计算的余弦相似度分数

python - 遍历 python 中的日期范围

Python删除源中的某些元素