Очистка данных Twitter pandas python

#python #python-3.x #pandas

#python #python-3.x #pandas

Вопрос:

Пытаюсь очистить данные Twitter как фрейм данных panda. Кажется, я пропустил один шаг. После того, как я обработаю все твиты, я думаю, что мне не хватает перезаписи новых поверх старых твитов? Когда я сохраняю файл, я не вижу никаких изменений в твитах. Чего мне не хватает?

 import pandas as pd
import re
import emoji
import nltk
nltk.download('words')
words = set(nltk.corpus.words.words())

trump_df = pd.read_csv('new_Trump.csv')
for tweet in trump_df['tweet']:
    tweet = re.sub("@[A-Za-z0-9] ","",tweet) #Remove @ sign
    tweet = re.sub(r"(?:@|http?://|https?://|www)S ", "", tweet) #Remove http links
    tweet = " ".join(tweet.split())
    tweet = ''.join(c for c in tweet if c not in emoji.UNICODE_EMOJI) #Remove Emojis
    tweet = tweet.replace("#", "").replace("_", " ") #Remove hashtag sign but keep the text
    tweet = " ".join(w for w in nltk.wordpunct_tokenize(tweet) 
         if w.lower() in words or not w.isalpha()) #Remove non-english tweets (not 100% success)
    print(tweet)
trump_df.to_csv('new_Trump.csv')
  

Комментарии:

1. Точно, вы никогда не сохраняете измененный твит обратно в dataframe.

2. вам нужно сохранить каждый tweet из них в конце цикла for

Ответ №1:

Как вы очень хорошо сказали, вы никогда не сохраняете данные обратно, давайте создадим функцию, которая выполняет всю работу, а затем передадим ее в dataframe с помощью map . Это более эффективно, чем перебирать каждое значение в dataframe и сохранять его в списке (вариант B).

 def cleaner(tweet):
    tweet = re.sub("@[A-Za-z0-9] ","",tweet) #Remove @ sign
    tweet = re.sub(r"(?:@|http?://|https?://|www)S ", "", tweet) #Remove http links
    tweet = " ".join(tweet.split())
    tweet = ''.join(c for c in tweet if c not in emoji.UNICODE_EMOJI) #Remove Emojis
    tweet = tweet.replace("#", "").replace("_", " ") #Remove hashtag sign but keep the text
    tweet = " ".join(w for w in nltk.wordpunct_tokenize(tweet) 
         if w.lower() in words or not w.isalpha())
    return tweet
trump_df['tweet'] = trump_df['tweet'].map(lambda x: cleaner(x))
trump_df.to_csv('') #specify location
  

Это приведет к перезаписи tweet столбца с изменениями.

Вариант B:

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

 clean_tweets = []
for tweet in trump_df['tweet']:
    tweet = re.sub("@[A-Za-z0-9] ","",tweet) #Remove @ sign
    ##Here's where all the cleaning takes place
    clean_tweets.append(tweet)
trump_df['tweet'] = clean_tweets
trump_df.to_csv('') #Specify location
  

Комментарии:

1. Я предпочитаю вариант «B». Спасибо.

2. Конечно! Вот почему я написал оба 🙂 Не стесняйтесь принять ответ, если это поможет вам решить проблему. Спасибо!

3. нужно подождать несколько минут, прежде чем он позволит мне принять.