2016-08-04 4 views
1

Я хотел ограничить печатаемые строки, выбрав строки на основе значения в определенном столбце.Pandas - печать ограниченных строк на основе значения в одном столбце

Например:

Column1, Column2, Column3 
aaa, bbb, ccc 
none, ddd, ggg 

Я просто хочу, чтобы напечатать строку, в которой Column1 значение является none.

Вот мой код:

for v in df: 
    if 'none' in df['2nd_prize']: 
     print v 
+2

Просьба указать, что вы попробовали. – merlin2011

+0

для v в df ['2nd_prize']: if 'none' in df ['2nd_prize']: print v – Fawad

+0

Я рекомендую вам поместить полный пример с образцом ввода в ваш вопрос, а не добавлять строки в комментарии. – merlin2011

ответ

1
for row in table: 
    if row[0] is none: 
    print row 
1

Можно подмножество строк из dataframe с помощью loc ограничить строки, содержащие "none" в Column 1, как показано ниже:

Подготовка данных

In [1]: import pandas as pd 
    ...: from io import StringIO 
    ...: 

In [2]: df = pd.read_csv(StringIO(
    ...: ''' 
    ...: Column1, Column2, Column3 
    ...: aaa, bbb, ccc 
    ...: none, ddd, ggg 
    ...: kkk, jjj, ppp 
    ...: none, eee, fff 
    ...: ''')) 

Операции

In [3]: df.loc[df['Column1'] == "none"] 
Out[3]: 
    Column1 Column2 Column3 
1 none  ddd  ggg 
3 none  eee  fff 
+1

Большое спасибо. Оно работает. – Fawad

1

Вы можете использовать boolean indexing с маской:

import pandas as pd 

df = pd.DataFrame({'Column2': {0: 'bbb', 1: 'ddd'}, 
        'Column1': {0: 'aaa', 1: 'none'}, 
        'Column3': {0: 'ccc', 1: 'ggg'}}) 

print (df) 
    Column1 Column2 Column3 
0  aaa  bbb  ccc 
1 none  ddd  ggg 

print (df['Column1'] == "none") 
0 False 
1  True 
Name: Column1, dtype: bool 

print (df[df['Column1'] == "none"]) 
    Column1 Column2 Column3 
1 none  ddd  ggg 

Если значения содержит пробелы в начале строки, используйте str.strip:

import pandas as pd 

df = pd.DataFrame({'Column2': {0: ' bbb', 1: ' ddd'}, 
        'Column1': {0: ' aaa', 1: ' none'}, 
        'Column3': {0: ' ccc', 1: ' ggg'}}) 

print (df) 
    Column1 Column2 Column3 
0  aaa  bbb  ccc 
1 none  ddd  ggg 

print (df['Column1'].str.strip() == "none") 
0 False 
1  True 
Name: Column1, dtype: bool 

print (df[df['Column1'].str.strip() == "none"]) 
    Column1 Column2 Column3 
1 none  ddd  ggg 
1

Вот один дополнительный подход который сначала вручную удаляет пробелы, а затем передает содержимое обработанного файла к пандам.

import pandas as pd 
from io import StringIO 

# First strip out the whitespace 
contents = open('Input.txt').read().splitlines() 
contents = "\n".join([",".join([x.strip() for x in y.split(",")]) for y in contents]) 

# Convert to a stringIO to feed to pandas 
df = pd.read_csv(StringIO(unicode(contents, 'utf-8'))) 

print df[df['Column1'] == "none"] 
+0

спасибо @ merlin2011 – Fawad

Смежные вопросы