Pandas Regex:仅从csv中读取具有regex模式的特定列

ee7vknir  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(118)

给定一个大的CSV文件(大到足以超过RAM),我希望只读取遵循某些模式的特定列。列可以是以下任意列:S_0, S_1, ...D_1, D_2等例如, Dataframe 中的块如下所示:

正则表达式模式例如是以S开头的anyu列:S_\d.*
现在,我如何将其应用于pd.read_csv(/path/, __)来读取所提到的特定列?

ljo96ir5

ljo96ir51#

您可以先读取几行,然后尝试DataFrame.filter来获取可能的列

cols = pd.readcsv('path', nrows=10).filter(regex='S_\d*').columns
df = pd.readcsv('path', usecols=cols)
xurqigkl

xurqigkl2#

采取了与评论中提到的相同的方法(截至目前)。下面是我使用的详细片段:

def extract_col_names(all_cols, pattern):
    result = []
    
    for col in all_cols:
        if re.match(pattern, col):
            result.append(col)
        else:
            continue
            
    return result

extract_col_names(cols, pattern="S_\d+")

而且它起作用了!但是如果没有这种变通方法,即使是装载柱子本身也足够重。那么,在阅读CSV时,是否存在解析正则表达式模式的方法呢?这仍然是个问题。
谢谢你的回应:)

bz4sfanl

bz4sfanl3#

您可以使用usecols参数,如下所示:

import re
import pandas as pd

pattern = 'S_\d+'

df = pd.read_csv('path/your_file.csv', usecols=lambda col: bool(re.match(pattern, col)))

相关问题