2015-03-02 2 views
0

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

# sys.setdefaultencoding() does not exist, here! 
import sys 
reload(sys) # Reload does the trick! 
sys.setdefaultencoding('UTF8') 

import tushare as ts 
import pandas as pd 

df = ts.get_tick_data('002428','2015-03-02') 
df.head(10) 

for volume in df: 
    if volume = 777: 
     print "buy signal" 
    elif volume = 12345: 
     print "wait and see" 
    else: 
     print "nothing" 

enter image description here Кажется, не работает. И я хочу, чтобы все отфильтрованные данные можно было сохранить в формате pandas Dataframe.

+0

'Кажется, что не работает' каким образом? –

+0

Ваш цикл цикла не будет работать, потому что возвращаемый возвращаемый объект является столбцом, а не строками, вам нужно зацикливать значения индекса, так что 'for i в df.index: #do something' – EdChum

+0

вы можете показать результат из "print df.head()"? –

ответ

0

Как уже упоминалось Реут, вам нужно использовать «==» вместо «=» для сравнения. Также петля

for volume in df: 
    do stuff 

Петли через столбцы в кадре данных. Если вы хотите перебрать значения в столбце сделать это следующим образом:

for i in df['volume']: 
    do stuff 

если вы хотите сохранить результаты в кадре данных, я бы определить функцию, а затем применить его к кадру данных, как это :

def my_func(volume): 
    if volume == 777: 
     return "buy signal" 
    elif volume == 12345: 
     return "wait and see" 
    else: 
     return "nothing" 

df['type'] = df.volume.apply(my_func) 

и последний шаг, если вы хотите, чтобы фильтровать только "купить сигнал" строки сделать это:

new_df = df[df['type'] == 'buy_signal'] 
+0

Ошибка в вашей функции. Я предполагаю, что это может быть 12345: может быть, должно быть «12345»? –

+0

Я хочу сделать цикл по каждому значению строки с именем volume. –

+0

вы можете дать ошибку? если данные хранятся как текст вместо int/float, вы правы, он должен иметь котировки вокруг чисел –

2

Для сравнения используются операторы сравнения (==), а не оператор присваивания (=), также как и @EdChum, упомянутые в комментариях, вы повторяете столбцы. Повторить применение колонки df[column_name]:

for volume in df['volume']: 
    if volume == 777: 
      print "buy signal" 
     elif volume == 12345: 
      print "wait and see" 
     else: 
      print "nothing 
+0

Да, я просто изменил, но он все равно не дает мне ничего печатать. Но я уверен, что есть некоторые объемы равны 777. –

+0

напечатайте переменную 'volume', чтобы увидеть, что на самом деле там. –

+1

Извините, что ваш ответ неверен, итерабельность, возвращаемая из 'df', - это столбцы, а не строки, поскольку OP намеревается – EdChum

1

Использование ==, а не =. И вы не зацикливаетесь на df, как вы думаете. Вы просто прокручиваете столбцы, и вам нужно прокручивать строки.

for index in df.index: 
    volume = df.loc[index,'volume'] 
    if volume == 777: 
     print index, volume, "buy signal" 
    elif volume == 12345: 
     print index, volume, "wait and see" 
    else: 
     print index, volume, "nothing" 
Смежные вопросы