我有数千个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"。