繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM