I have a pandas column that contains strings. I want to get a word count of all of the words in the entire column. What\'s the best way of doing that without looping through eac
Another option using the cat
string method. We will smash all strings together then split and count
len(df["a"].str.cat(sep=' ').split())
elaborate test data
li = [
'Lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur',
'adipiscing', 'elit', 'Integer', 'et', 'tincidunt', 'nisl',
'Sed', 'pretium', 'arcu', 'nec', 'est', 'hendrerit',
'vestibulum', 'Curabitur', 'a', 'nibh', 'justo', 'Praesent',
'non', 'pellentesque', 'enim', 'ac', 'nulla', 'ut', 'mi',
'diam', 'Aenean', 'placerat', 'ante', 'euismod', 'pulvinar',
'augue', 'purus', 'ornare', 'erat', 'pharetra', 'mauris',
'sapien', 'vitae', 'In', 'id', 'velit', 'quis', 'mattis',
'condimentum', 'Cras', 'congue', 'neque', 'faucibus', 'nisi',
'tempor', 'eget', 'Etiam', 'semper', 'Nulla', 'elementum',
'magna', 'Donec', 'vel', 'ex', 'dictum', 'Aliquam', 'lobortis',
'rutrum', 'ligula', 'Vivamus', 'eu', 'eros', 'Morbi', 'blandit',
'rhoncus', 'consequat', 'orci', 'convallis', 'finibus', 'lorem',
'urna', 'molestie', 'in', 'sed', 'luctus', 'Ut', 'imperdiet',
'felis', 'Mauris', 'nunc', 'malesuada', 'lacinia', 'Vestibulum',
'bibendum', 'risus', 'tortor', 'sollicitudin', 'aliquam',
'primis', 'ultrices', 'posuere', 'cubilia', 'Curae',
'Phasellus', 'turpis', 'auctor', 'venenatis', 'Pellentesque',
'fermentum', 'accumsan', 'maximus', 'Fusce', 'ultricies',
'tristique', 'sodales', 'suscipit', 'sagittis', 'at', 'cursus',
'Nullam', 'dui', 'fringilla', 'mollis', 'Orci', 'varius',
'natoque', 'penatibus', 'magnis', 'dis', 'parturient', 'montes',
'nascetur', 'ridiculus', 'mus', 'facilisi', 'sem', 'viverra',
'feugiat', 'aliquet', 'lectus', 'porta', 'Nunc', 'facilisis',
'Duis', 'volutpat', 'scelerisque', 'Maecenas', 'tempus',
'massa', 'laoreet', 'gravida', 'odio', 'iaculis', 'libero',
'eleifend', 'leo', 'Quisque', 'ullamcorper', 'dignissim',
'interdum', 'vulputate', 'lacus', 'vehicula', 'Nam', 'commodo',
'dapibus', 'efficitur', 'tellus', 'Suspendisse', 'metus',
'Proin', 'quam', 'porttitor', 'egestas'
]
df = pd.DataFrame(
dict(a=[' '.join(
np.random.choice(li, np.random.randint(5, 10, 1))
) for _ in range(10000)]))
naive test results