Итерация скрипта Python через каждую строку в пандах - PullRequest
0 голосов
/ 18 октября 2018

У меня есть скрипт Python для отправки предупреждений через Twitter через slack: -

def twitter_setup():
    """
    Utility function to setup the Twitter's API
    with our access keys provided.
    """
    # Authentication and access using keys:
    auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
    auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

    # Return API with authentication:
    api = tweepy.API(auth)
    return api


extractor = twitter_setup()
# We create a tweet list as follows:
tweets = extractor.user_timeline(screen_name="**FortniteGame**", count=200)


data = pd.DataFrame(data=[tweet.text for tweet in tweets], columns=['Tweets'])

# We add relevant data:
data['ID'] = np.array([tweet.id for tweet in tweets])
data['Date'] = np.array([tweet.created_at for tweet in tweets])
data['text'] = np.array([tweet.text for tweet in tweets])
#data['Date'] = pd.to_datetime(data['Date'], unit='ms').dt.tz_localize('UTC').dt.tz_convert('US/Eastern')

created_time = datetime.datetime.utcnow() - datetime.timedelta(minutes=1)

data = data[(data['Date'] > created_time) & (
    data['Date'] < datetime.datetime.utcnow())]

my_list = ['Maintenance', 'Scheduled', 'downtime', 'Issue', 'Voice', 'Happy',
           'Problem', 'Outage', 'Service', 'Interruption', 'voice-comms', 'Downtime']

ndata = data[data['Tweets'].str.contains(
    "|".join(my_list), regex=True)].reset_index(drop=True)


slack = Slacker('xoxb-3434-4334-fgsgsdfsf')

#message = "test message"
slack.chat.post_message('#ops-twitter-alerts', 'FNWP :' +' '+ ndata['Tweets'] + '<!channel|>')

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

       client domain twittername
1.)    EPIC   FNWP   FortniteGame
2.)    PUBG   BLHP   PUBG
3.)    abc    xyx    abhi98358

Я хочу использовать один и тот же скрипт для каждого клиента, и я хочу повторить его и предположить, что сначала он будет работать для Fortnite, а затем для PUBG, а затем для abhi98358, и таким же образом он должен идти шаг за шагом.

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Вы можете сделать, как показано ниже

twtLst = []
for _, row in df.iterrows():
   twtDtl = row['client'], row['domain'], row['twittername']
   twtLst.append(twtDtl)

twtLst будет списком кортежей, а затем вы получите к нему доступ соответственно, как показано ниже

for twt in twtLst:
    client, domain, twtname = twt
    tweets = extractor.user_timeline(screen_name="**" + twtname +"**", count=200)
    #message = "test message"
    slack.chat.post_message('#ops-twitter-alerts', domain + ':' + client +' '+ndata['Tweets'] + '<!channel|>')
0 голосов
/ 18 октября 2018

Вот, пожалуйста,

см. Мое решение преобразование скрипта Python в функцию для итерации по каждой строке

for index, row in dff.iterrows():
    twt=row['twittername']
    domain = row['domain']
    print(twt)
    print(domain)
    extractor = twitter_setup()
    # We create a tweet list as follows:
    tweets = extractor.user_timeline(screen_name=twt, count=200)
    data = pd.DataFrame(data=[tweet.text for tweet in tweets], columns=['Tweets'])

    # We add relevant data:
    data['ID'] = np.array([tweet.id for tweet in tweets])
    data['Date'] = np.array([tweet.created_at for tweet in tweets])
    data['text'] = np.array([tweet.text for tweet in tweets])
    #data['Date'] = pd.to_datetime(data['Date'], unit='ms').dt.tz_localize('UTC').dt.tz_convert('US/Eastern')

    created_time = datetime.datetime.utcnow() - datetime.timedelta(minutes=160)

    data = data[(data['Date'] > created_time) & (data['Date'] < datetime.datetime.utcnow())]

    my_list = ['Maintenance', 'Scheduled', 'downtime', 'Issue', 'Voice', 'Happy','hound',
               'Problem', 'Outage', 'Service', 'Interruption', 'ready','voice-comms', 'Downtime','Patch']

    ndata = data[data['Tweets'].str.contains( "|".join(my_list), regex=True)].reset_index(drop=True)

    print(ndata)
    if len(ndata['Tweets'])> 0:
        slack.chat.post_message('#ops-twitter-alerts', domain  +': '+ ndata['Tweets'] + '<!channel|>')
    else:
        print('hi')
0 голосов
/ 18 октября 2018

Пример df:

t = pd.DataFrame({'A': ['FortniteGame', 'PUBG', 'abhi98358']})

Пример итерации:

for index, row in t.iterrows():
   print "**" + row['A'] +"**"

Пример вывода выше:

**FortniteGame**
**PUBG**
**abhi98358**

Для вашего кода:

for index,rows in df.iterows():
   tweets = extractor.user_timeline(screen_name=("**" + row['twittername'] +"**"), count=200)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...