猿问

将 csv 导入 PANDAS 时,如何只导入其中包含指定字符串的列?

我有数千个 CSV 文件,每个文件包含数百列和数十万行。对于速度,我只想将数据导入我需要的 PANDAS 数据帧。我可以使用单独的元数据文件过滤我不需要的 CSV 文件,但我无法弄清楚如何删除我不需要的列(在导入期间——我知道如何过滤数据框的列在它被导入之后,但就像我说的,我试图避免导入不必要的数据)。


假设我有以下 csv 文件:


Date/Time  Apple Tart  Cherry Pie  Blueberry Pie  Banana Pudding  Tomato Soup

1:00       2           4           7              6               5

2:00       3           5           4              5               8

3:00       1           4           7              4               4

我只想导入包含文本“饼图”以及“日期/时间”列的列。另请注意,我的所有 csv 文件的列名和列数都不同,因此“usecol”规范对我不起作用,因为我不知道要输入的具体列名。


蛊毒传说
浏览 164回答 2
2回答

杨__羊羊

pandas read_csv中的usecols参数接受一个函数来过滤您感兴趣的列:import pandas as pdfrom io import StringIOdata = """Date/Time  Apple Tart  Cherry Pie  Blueberry Pie  Banana Pudding  Tomato Soup1:00       2           4           7              6               52:00       3           5           4              5               83:00       1           4           7              4               4"""df = pd.read_csv(StringIO(data),                 sep='\s{2,}',                 engine='python',                 #this is the key part of the code for your usecase                 #looks for columns that contain Pie or Date/Time                 #and returns only those columns                 #quite extensible as well, since it accepts a function                 usecols = lambda x: ("Pie" in x) or ("Date/Time" in x) )dfDate/Time   Cherry Pie  Blueberry Pie0   1:00    4   71   2:00    5   42   3:00    4   7

HUWWW

您可以在将 read_csv() 用作列表时指定列名,例如:df=pd.read_csv('fila.csv',names=['columnName#1','columnName3'])看我没有使用“columnName2”。
随时随地看视频慕课网APP

相关分类

Python
我要回答