在CSV中搜索列中的字符串并仅显示特定的列

时间:2018-10-27 11:42:58

标签: python pandas csv

我想做的是在包含70多个列的超大型CSV文件的1列中搜索字符串。

找到该字符串所在的行后,我只想显示一组特定列中的数据。

这就是我不断给我的错误

import pandas as pd
df = pd.read_csv('output.csv')
#columns I would like to display data from
df[df.iloc[0,1,2,11,12,14]] 
#search for specific term in specific column
df.loc[df['COLUMN NAME'].str.contains('SEARCH TERM')] 

0,1,2,11,12,14是我要显示的列的索引号。其他列包含我不关心的数据。

import pandas as pd
df = pd.read_csv('output.csv')
df.loc[df['COLUMN NAME'].str.contains('SEARCH TERM')]

上面的代码在找到字符串时为我提供了所有列的所有数据,但是对于这个简单的应用程序来说,它是无用的数据。

这感觉像是一个超级简单的修复程序,但我似乎无法弄清楚。

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用 usecol panda.read_csv构造函数参数来定义所需的列。 Wiki: read_csv

  

usecols:类似于列表或可调用的列表,默认为无

     

返回列的子集。如果类似列表,则所有元素必须   位置(即文档列中的整数索引)或   与用户在以下位置提供的列名称相对应的字符串   名称或从文档标题行推断出的名称。例如,一个   有效的类似列表的usecols参数应为[0,1,2]或['foo','bar',   “巴兹”]。元素顺序被忽略,因此usecols = [0,1]与[1,   0]。从保留元素顺序的数据实例化DataFrame   使用pd.read_csv(data,usecols = ['foo','bar'])[['foo','bar']]用于   以['foo','bar']顺序或pd.read_csv(data,usecols = ['foo',   'bar'])[[['bar','foo']]用于['bar','foo']顺序。

     

如果可调用,则会根据   列名,返回可调用函数计算结果的名称   真正。一个有效的可调用参数的示例是lambda x:   ['AAA','BBB','DDD']中的x.upper()。使用此参数会导致   解析时间更快,内存使用量更低。

因此,在您的情况下,它将是:

import pandas as pd
df = pd.read_csv(
    'output.csv',
    usecols=[0,1,2,11,12,14]
)
df.loc[df['COLUMN NAME'].str.contains('SEARCH TERM')] 

您可以提供列ID数组或名称数组

希望有帮助