【问题标题】:Extracting a numerical value from .csv files从 .csv 文件中提取数值
【发布时间】:2020-01-29 00:19:22
【问题描述】:

我有一个数据框,其中有一列路径名。我可以使用以下方式访问这些路径:

for i, p in enumerate(df['path']):

我现在希望从每个输出文件中提取一个值。

csv 文件如下所示:

# some values 
# some values : some values
# some values : some values
# some values : some values
# some string : the value I want
# some string : some values

有没有办法提取这个值并将其插入到我的数据框中?

我相信正则表达式可以解决问题。我只是不确定确切的方法。我有一些模板代码,如下所示:

if re.match(r"something", p):
        df = pd.read_csv(p)
        df.iloc[i, value_column] = the value I want

【问题讨论】:

    标签: python regex pandas dataframe


    【解决方案1】:

    这是使用内置 split 从 text/csv 中提取值的解决方案:

    def get_value(string):
        array = string.split(": ")  # maybe without the white space
        return array[0] if len(array) == 1 else array[1]
    
    get_value('some values')
    # 'some values'
    get_value('some string : the value I want')
    # 'the value I want'
    

    或者,使用正则表达式

    re.sub(r'.*\:\s*(.*)', r'\1', 'some values')
    # 'some values'
    re.sub(r'.*\:\s*(.*)', r'\1', 'some string : the value I want')
    # 'the value I want'
    

    【讨论】:

    • 感谢您的回复。我可能会误解,但这不需要我知道 csv 中的值是什么吗?我知道值的位置,但不知道值是什么。
    【解决方案2】:

    当我在更清晰的背景下被问到这个问题时,我得到了帮助。 用于 csv 文件中的一行。

    if re.match('# some string\s*:\s*([^\n]+)', line):
                        number = re.match('# some string\s*:\s*([^\n]+)', line).group(1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      相关资源
      最近更新 更多