Finding the most frequent words in Pandas dataframe
Note: The data you're going through is 370k+ lines. Because I tend to run different versions of code a lot during review, I've limited my version to 1000 lines.

Your code goes all over the place. Imports, downloads, another import, a variable being loaded, a function definition, the function being called and oh, another import. In that order. Would you agree it's helpful to sort those, so we can easily find what we're looking for?
The revised head of the file would look like this:
import re
import string
import nltk

import pandas as pd

from collections import Counter
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords

nltk.download('punkt')
nltk.download('stopwords')

After that, we'd ordinarily put the function definition. However, there's part of the program that doesn't have to be in the function itself. It only has to be executed once, even if multiple files are handled.
# removing the emojies
# https://www.kaggle.com/alankritamishra/covid-19-tweet-sentiment-analysis#Sentiment-analysis
EMOJI_PATTERN = re.compile(&quot;[&quot;
                           u&quot;\U0001F600-\U0001F64F&quot;  # emoticons
                           u&quot;\U0001F300-\U0001F5FF&quot;  # symbols &amp; pictographs
                           u&quot;\U0001F680-\U0001F6FF&quot;  # transport &amp; map symbols
                           u&quot;\U0001F1E0-\U0001F1FF&quot;  # flags (iOS)
                           u&quot;\U00002702-\U000027B0&quot;
                           u&quot;\U000024C2-\U0001F251&quot;
                           &quot;]+&quot;, flags=re.UNICODE)

The variable is in UPPER_CASE now, because it's a pseudo-constant (Python doesn't really have constants, but it's a reminder to you and other developers that the variable should be set once and only once). It's customary to put the pseudo-constants between the imports and function definitions so you know where to look for them.
Now, the rest of the program is mostly fine already. You could use more functions, but with a program this size that would mostly be an exercise. I'd rename some of the variables, cut up the lines, use a proper docstring (you had a great start already with the comment at the start of the cleaning function) and prepare the program for re-use. After all, it would be nice to simply import from this file instead of having to copy code to the next few projects using this, wouldn't it? And we don't want to run the specifics of this program every time it's imported, so we explicitly only run it if it's not imported.
import re
import string
import nltk

import pandas as pd

from collections import Counter
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords

nltk.download('punkt')
nltk.download('stopwords')

STOP_WORDS = stopwords.words()

# removing the emojies
# https://www.kaggle.com/alankritamishra/covid-19-tweet-sentiment-analysis#Sentiment-analysis
EMOJI_PATTERN = re.compile(&quot;[&quot;
                           u&quot;\U0001F600-\U0001F64F&quot;  # emoticons
                           u&quot;\U0001F300-\U0001F5FF&quot;  # symbols &amp; pictographs
                           u&quot;\U0001F680-\U0001F6FF&quot;  # transport &amp; map symbols
                           u&quot;\U0001F1E0-\U0001F1FF&quot;  # flags (iOS)
                           u&quot;\U00002702-\U000027B0&quot;
                           u&quot;\U000024C2-\U0001F251&quot;
                           &quot;]+&quot;, flags=re.UNICODE)


def cleaning(text):
    &quot;&quot;&quot;
    Convert to lowercase.
    Rremove URL links, special characters and punctuation.
    Tokenize and remove stop words.
    &quot;&quot;&quot;
    text = text.lower()
    text = re.sub('https?://\S+|www\.\S+', '', text)
    text = re.sub('&lt;.*?&gt;+', '', text)
    text = re.sub('[%s]' % re.escape(string.punctuation), '', text)
    text = re.sub('\n', '', text)
    text = re.sub('[’“”…]', '', text)

    text = EMOJI_PATTERN.sub(r'', text)

    # removing the stop-words
    text_tokens = word_tokenize(text)
    tokens_without_sw = [
        word for word in text_tokens if not word in STOP_WORDS]
    filtered_sentence = (&quot; &quot;).join(tokens_without_sw)
    text = filtered_sentence

    return text


if __name__ == &quot;__main__&quot;:
    max_rows = 1000  # 'None' to read whole file
    input_file = 'covid19_tweets.csv'
    df = pd.read_csv(input_file,
                     delimiter = ',',
                     nrows = max_rows,
                     engine = &quot;python&quot;)

    dt = df['text'].apply(cleaning)

    word_count = Counter(&quot; &quot;.join(dt).split()).most_common(10)
    word_frequency = pd.DataFrame(word_count, columns = ['Word', 'Frequency'])
    print(word_frequency)

Naturally, if you'd want a more memory-efficient version, you could cut-out all intermediate variables in those last few lines. That would make it a little harder to read though. As long as you're not reading multiple large files into memory in the same program, it should be fine.
Some of the advice I've provided comes from the PEP8, the official Python style guide. I can highly recommend taking a look at it.