2015-07-26 6 views
0

Я хочу, чтобы выбрать столбцы, которые удовлетворяют определенным критериям и добавить их в результате DataFrameИтерация по столбцам и проверить условия

import pandas as pd 

df = pd.read_csv('outputData.csv') 

for col in df.columns: 
    for index in col: #how can I do this? 
     if(index > 0) #... check some conditions 

Так как я могу итерацию по индексам столбцов? Или, как правило, лучший способ сделать это?

EDIT:

DataFrame для чтения выглядит следующим образом:

col1 col2 col3 .... 
1 1 4 ... 
2 1 2 ... 
1 0 0 ... 

Так что я в основном хочу извлечь столбцы, которые содержат самую высокую сумму содержащихся значений и содержат, как наименее нулей, как возможное. В этом случае столбцы 1 и 3 были бы предпочтительнее над столбцом 2. Пока не уверены, как я собираюсь это взвесить.

+0

Что вы делаете с col? Вы понимаете, что вы просто повторяете имена столбцов, а 'for col in df' будет делать то же самое? –

+0

'for col in df.columns [1:]:' также просто получит имена столбцов, игнорируя первый –

+0

небольшой примерный фреймворк с ожидаемыми результатами, который сэкономит много времени здесь ... – JohnE

ответ

0

Используйте функцию enumerate() для создания индекса вместе с именем столбца:

import pandas as pd 

df = pd.read_csv('outputData.csv') 

for index, column in enumerate(df.columns): 
    print index, column 
+0

Я что-то упустил или это не совсем то, о чем уже ответил ozgur? –

+0

@PadraicCunningham Да, это то же самое, что и решение ozgur. –

1

Не уверен, что этот вопрос поставлен правильно. Когда вы говорите «столбцы», которые соответствуют определенным критериям, неясно, хотите ли вы только данные, содержащиеся в этом столбце, или если вы хотите, чтобы строки, которые заполняли критерии, основывались на значении конкретного столбца.

Вот образец кадра данных, в котором я храню информацию о бейсболисте. Я использую iPython, поэтому In и Out являются ссылками на подсказки оболочки iPython. Я использую метод .head(5), чтобы показать первые пять ведущих строки данных в dataframe:

In [45]: lahman_data.head(5) 
 
Out[45]: 
 
      name handedness height weight avg HR 
 
0  Tom Brown   R  73  170 0.000 0 
 
1 Denny Lemaster   R  73  182 0.130 4 
 
2  Joe Nolan   L  71  175 0.263 27 
 
3  Denny Doyle   L  69  175 0.250 16 
 
4 Jose Cardenal   R  70  150 0.275 138

Если бы я хотел, чтобы создать новый кадр данных, содержащий все строки, которые удовлетворяют критерии любого игрок, который весит> 160 фунтов:

In [46]: weight_gt_160 = lahman_data[lahman_data['weight'] > 160] 
 
In [46]: weight_gt_160.head(5) 
 
Out[46]: 
 
      name handedness height weight avg HR 
 
0  Tom Brown   R  73  170 0.000 0 
 
1 Denny Lemaster   R  73  182 0.130 4 
 
2  Joe Nolan   L  71  175 0.263 27 
 
3  Denny Doyle   L  69  175 0.250 16 
 
5  Mike Ryan   R  74  205 0.193 28

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

Но, если вы только хотели создать dataframe, который имел только данные о весе, но и предусматривался вес больше 160:

In [48]: weight_only_gt_160 = lahman_data.weight[lahman_data['weight']> 160] 
 
In [51]: weight_only_gt_160.head(5) 
 
Out[51]: 
 
0 170 
 
1 182 
 
2 175 
 
3 175 
 
5 205 
 
Name: weight, dtype: int64

я использовал синтаксис, необходимый для охвата результаты попадают только в столбец «вес» и ничего больше.

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

В любом случае, надеюсь, что это поможет!

+0

Вау, спасибо за ответ. помогли много, хотя я действительно просто искал функцию enumerate() – Pete

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