Witnesses told the media the regional train began to shake heavily as if it were running over rocks, before braking suddenly and derailing.
Italian Prime Minister Paolo Gentiloni promised that full light would be shed on the circumstances of the crash, whose cause was not immediately clear. Milan prosecutors have opened a probe and investigators have questioned the train driver.
The six-carriage train was carrying around 350 passengers, according to media reports, and it derailed at around 7 am (0600 GMT) near Segrate in Milan's northeastern suburbs. Firefighters, police and rescue workers spent hours trying to free passengers, some of whom were trapped in carriages, one of which had jack-knifed across the track and was bent almost at a right angle, after the train struck a pylon.
READ MORE: Here's everything we know so far about the Milan train derailment
"People were scared, they were shouting 'my God, my god, my god'," John Eugaosa, a 25-year-old Nigerian working in Milan told AFP. His trousers were stained with the blood of other passengers.
"I managed to climb out of a window after the carriage went onto its side," he added, while waiting to see a doctor in one of two gymnasiums set up to care for the more than 90 people who sustained light injuries.
The identities of the three women killed have not been confirmed, but Italian media reported they were aged 39, 51 and 61.
In a telegram of condolences, Pope Francis said he was "deeply saddened" by the tragedy and would pray for the victims.
"Unfortunately the train was full, and if the current toll ends up staying as it is it would almost be a miracle. The train was packed with commuters and students," said Milan's police commissioner Marcello Cardona.
"We are investigating the dynamics of the incident, the rail structure... everything has to be checked piece by piece," Cardona said.
One woman told the newspaper La Repubblica that her daughter had called her on her phone to say "Mummy, help, the train is derailing" as the accident happened.
IN PICTURES: Rescue efforts and aftermath of Milan train disaster
Pictures issued by the Italian fire service showed at least one passenger still in his seat, trapped inside the wreckage. Firefighters were seen carrying victims to a waiting helicopter, which transported them to a nearby hospital.
"Dying on the way to work is unacceptable," said Infrastructure Minister Graziano Delrio. "We demand the truth."
Delrio insisted that the Italian rail network was "one of the safest in the world".
The derailment is the most serious rail accident in Italy since 23 people were killed in a high-speed head-on collision between two passenger trains in July 2016 in the southern Puglia region.
A 'technical problem'
An official from Rete Ferroviaria Italiana (RFI), which manages the rail network, said a 23-centimetre (57-inch) rupture in the track could have been a factor in the accident, but that it was still working to establish whether that was "the cause or a consequence of the incident".
"There was either a problem with the tracks or the train's bogie (chassis)," said Dario Barlotta, a representative of Italy's National Public Transport Observatory.
The train belonged to the Lombardy regional rail company Trenord, which is owned equally by the public company Trenitalia and Ferrovie Nord Milano and operates principally in the north of Italy.
Trenord informed passengers at 8 am of an interruption to services due to a "technical problem", sparking sharp criticism on social media.
"In recent years we have invested more in high-speed trains and the main lines than in the network that should take people to work every day," said Cattaneo Raffaele, president of the Lombardy regional council.
"There needs to be political attention on the need to invest more in suburban rail travel."
By Celine Cornu