<p>@rabin-poudyal, Please note, <em>"Data splitting/cross validation has NOTHING to do with labelled or unlabelled"</em> dataset. On the contrary cross validation has been applied in clustering in both research and practice. See these papers for reference, <a href="https://arxiv.org/pdf/1702.02658.pdf" rel="nofollow noreferrer">1</a>,<a href="https://www.tandfonline.com/doi/abs/10.1198/106186005X59243" rel="nofollow noreferrer">2</a>,<a href="https://www.sciencedirect.com/science/article/pii/S0004370299000946" rel="nofollow noreferrer">3</a>, <a href="https://link.springer.com/article/10.1023/A:1008940618127" rel="nofollow noreferrer">4</a> and many more. Also see this discussion on <a href="https://stats.stackexchange.com/questions/95453/cross-validation-for-comparing-clustering-techniques">SE</a></p>

<p>As earlier pointed out, k-means works only for continuous data. Since your dealing with text data, suggest to use any other clustering algorithm that can work with categorical data for instance, <a href="http://www.math.le.ac.uk/people/ag153/homepage/KmeansKmedoids/Kmeans_Kmedoids.html" rel="nofollow noreferrer">k-medoids</a></p>
How to find the cluster in email
<p>I am doing a machine learning project and I have the dataset that contains the frequency of words that occurred in the email. I need to find the clusters that each mail belongs to. What I did is that I loaded a data into pandas dataframe, then I trained a KMeans algorithm. 
The dataset looks like following:</p>

<pre><code>[
    {
        "adwords": 2,
        "google": 4,
        "ads": 2,
        "facebook": 1,
        "shyam": 2
    },
    {
        "facebook": 4,
        "post": 2,
        "is": 1,
        "comment": 2,
        "likes": 1,
        "google": 1
    },...]
</code></pre>

<p>Then my python code looks like this:</p>

<pre><code>import numpy as np
import pandas as pd

data = pd.read_json('data.json', orient='records')
data = data.fillna(0)

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5, init='k-means++')
kmeans.fit_predict(data)
</code></pre>

<p>Now since I have only 30 emails and I need to cluster them according to the words given, I cannot also split into train test set. Is this a right approach to solve the problem. Please suggest what algorithm would do best and what I should be doing. Thanks in advance</p>