Five other people were hurt when the man set fire to the train and stabbed passengers in the attack on Saturday. Two of them, including a six-year-old child, are in a serious condition.
“To date there is no indication this was a terrorist or politically motivated act,” the Saint Gallen regional police said in a statement.
Police spokesman Hanspeter Kruesi told AFP the suspected attacker, who used flammable liquid to start the fire, was a Swiss national, and not of immigrant background.
“According to the information we have for the time being, the 27-year-old Swiss man poured out a flammable liquid … (which) caught fire,” Saint Gallen police said in a statement.
The man, who “was also armed with at least one knife”, carried out the attack on a moving train near Switzerland's eastern border with Liechtenstein and Austria, it said.
Seven people including the suspected attacker were admitted to hospital with burn and stab wounds, the statement said.
He said no one had overpowered the attacker, but that he had been hurt in the fire.
Kruesi denied reports that the man had targeted one specific woman on the train, dousing her with the flammable liquid.
“That is not correct. This was not directed concretely at one person,” he said, adding that it remained unclear whether the attacker knew any of his victims.
The victims included two men aged 17 and 50, three women aged 17, 34 and 43 and a six-year-old child. Dozens of people were on the train at the time of the attack, the police statement said.
Police said the attack had taken place at around 2:20 pm (1220 GMT) near Salez station on a train running between Buchs and Sennwald.
A massive contingent of rescue workers rushed to the scene, including police, firefighters, ambulances and three rescue helicopters.
Salez station remains closed, and police said replacement buses had been set up.
Saint Gallen prosecutors have opened a criminal investigation into the attack.