[英]When importing csv to PANDAS, how can you only import columns that contain a specified string within them?
我有数千个 CSV 文件,每个文件包含数百列和数十万行。 对于速度,我只想将数据导入我需要的 PANDAS 数据帧。 我可以使用单独的元数据文件过滤我们不需要的 CSV 文件,但是我无法弄清楚如何删除不需要的列(在导入期间——我知道如何过滤 dataframe 的列导入后,但就像我说的,我试图避免导入不必要的数据)。
所以假设我有以下 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
我只想导入包含文本“Pie”以及“日期/时间”列的列。 另请注意,我的所有 csv 文件的列名和列数都不同,因此“usecol”规范对我不起作用,因为我不知道要输入的具体列名。
您可以在使用 read_csv() 作为列表时指定列名,例如:
df=pd.read_csv('fila.csv',names=['columnName#1','columnName3'])
看我没有使用'columnName2'。
pandas read_csv中的usecols参数接受 function 来过滤您感兴趣的列:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.