将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"规范对我不起作用,因为我不知道要输入的特定列名。

pandas read_csv 中的 usecols 参数接受一个函数来过滤您感兴趣的列:

import pandas as pd
from io import StringIO
data = """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"""

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) )
df

Date/Time   Cherry Pie  Blueberry Pie
0   1:00    4   7
1   2:00    5   4
2   3:00    4   7

使用 read_csv(( 作为列表时,可以指定列名,例如:

df=pd.read_csv('fila.csv',names=['columnName#1','columnName3'])

看起来我没有使用"列名称2"。

最新更新