给定一个大的CSV文件(大到足以超过RAM),我希望只读取遵循某些模式的特定列。列可以是以下任意列:S_0, S_1, ...D_1, D_2等例如, Dataframe 中的块如下所示:
S_0, S_1, ...D_1, D_2
正则表达式模式例如是以S开头的anyu列:S_\d.*。现在,我如何将其应用于pd.read_csv(/path/, __)来读取所提到的特定列?
S
S_\d.*
pd.read_csv(/path/, __)
ljo96ir51#
您可以先读取几行,然后尝试DataFrame.filter来获取可能的列
DataFrame.filter
cols = pd.readcsv('path', nrows=10).filter(regex='S_\d*').columns df = pd.readcsv('path', usecols=cols)
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时,是否存在解析正则表达式模式的方法呢?这仍然是个问题。谢谢你的回应:)
bz4sfanl3#
您可以使用usecols参数,如下所示:
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)))
3条答案
按热度按时间ljo96ir51#
您可以先读取几行,然后尝试
DataFrame.filter
来获取可能的列xurqigkl2#
采取了与评论中提到的相同的方法(截至目前)。下面是我使用的详细片段:
而且它起作用了!但是如果没有这种变通方法,即使是装载柱子本身也足够重。那么,在阅读CSV时,是否存在解析正则表达式模式的方法呢?这仍然是个问题。
谢谢你的回应:)
bz4sfanl3#
您可以使用
usecols
参数,如下所示: