【问题标题】:Remove letters and signs from csv file - python 3.7从 csv 文件中删除字母和符号 - python 3.7
【发布时间】:2019-11-17 17:47:40
【问题描述】:

我得到了一个 CSV 文件,其中有一列名为 activity 的数据如下:

instv2-02_00001_20190517235008
instv2 (9)
Insti2(3)
Fbstt1_00001_20190517131933

我只需要从“活动”列中的名称中删除数字和任何其他符号(例如:_)。 这意味着只需要保留字母。 例如instv3-02_00001_20190517235157, instv1-02_00000_20190517234840、instv1 (4)...等都需要重命名/替换为 instv。如何在 Python 脚本中执行此操作?

【问题讨论】:

  • 看看re 正则表达式的python模块。
  • 请从 csv 文件中发布几行以及所需的输出?
  • 你可以使用这个regexre.findall("([A-Za-z]+)",string)
  • @Nick 谢谢。我添加了一个只有几行的图像。 instv3-02_00001_20190517235157、instv1-02_00000_20190517234840、instv1(4)..等都需要换成instv...fbstt4_00006_20190517132330、fbstt4(3)等都需要换成fbstt...
  • 查看如何创建minimal reproducible example

标签: python regex python-3.x csv


【解决方案1】:

使用 pandas,加载 CSV 文件并对 activity 列值应用正则表达式替换。

试试这个代码:

import re
import pandas as pd

df = pd.read_csv('your_file.csv')
df['activity'] = df['activity'].apply(lambda x: re.sub(r'^([a-zA-Z]+).*', r'\1', x))
df.to_csv('output.csv', index=False)

如果它与您的问题here 有关,那么您只需要 导入 re 并将解决方案的最后一行更改为:

import re

# ...

all_df['activity'] = all_df['activity'].apply(lambda x: re.sub(r'^([a-zA-Z]+).*', r'\1', x))
all_df.to_csv('all_data.csv', index=False)

【讨论】:

  • @Hasa 你可能需要导入re
【解决方案2】:

使用re模块和内置open函数:

import re

with open('Alldata10.csv', 'r') as file_r, open('Alldata10_revised.csv', 'w') as file_w:
    for line in file_r:
        line = line.split(',')
        line[0] = re.sub('[^a-zA-Z]+', '', line[0])
        line = ','.join(line)
        file_w.write(line)

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 2016-11-05
    • 2019-06-18
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多