Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

pandas: apply random.shuffle() to list column

I have a dataframe as follows,

import pandas as pd
df= pd.DataFrame({'text':['The weather is nice','the house is amazing','the flowers are blooming']})

I would like to shuffle the words in each row using random.shuffle(),(e.g the new first row will be ‘nice is weather the’ ),so I have done the following,

df.new_text = df.text.str.split()

and tried to map or apply shuffle() function but it returns None.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

print(df.new_text.map(lambda x: random.shuffle(x)))

or

print(df.new_text.apply(lambda x: random.shuffle(x)))

I am not sure what I am doing wrong here. and then finally I would like to join the shuffled words in the list to get a string per row,

df.new_text = df.new_text.apply( lambda x:' '.join(x))

>Solution :

This does the job.

shuffled_sentences = {"text":[]}

for sentence in df.values.ravel():
  np.random.shuffle(sentence)
  shuffled_sentences["text"].append(sentence)

shuffled_df = pd.DataFrame(shuffled_sentences)

The thing with np.random.shuffle is that it doesn’t return any output. So you need to store the list you want to shuffle in a vraible first. Then if you apply np.random.shuffle on it, the original variable itself would be shuffled.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading