Singh, 25, who has impressed with both the bat and the ball in the Indian junior side, replaced Ravindra Jadeja while leg spinner Amit Mishra came in for seamer Dhawal Kulkarni.
Dhoni, who retired from Test cricket during a disappointing tour of Australia last year, returns to lead the ODI and T20I squads, after Virat Kohli led India to a Test-series victory in Sri Lanka this month.
The selectors said they did not consider changing the limited-over captaincy, quashing speculation of any retirement by the Indian wicketkeeper-batsman from the shorter formats of the game.
The 34-year-old, who won the World Twenty20 on his captaincy debut in 2007, has scored 8,620 runs from 265 ODIs at an average of 52.24.
Opener Shikhar Dhawan, recovering from a hand fracture, is included in both squads.
For the three T20 internationals, selectors picked uncapped Karnataka seamer Sreenath Aravind, who has played 41 first-class matches.
Fast bowler Mohammed Shami, undergoing rehabilitation for a knee injury he suffered during the tour of Australia, was not considered for either squad.
The teams for the remaining two one-dayers and the four-Test series will be named later.
South Africa begin the gruelling tour with a practice match in New Delhi on September 29, with the first T20 to be played in Dharamsala on October 2.
ODI squad: Mahendra Singh Dhoni (captain), Ravichandran Ashwin, Stuart Binny, Shikhar Dhawan, Virat Kohli, Bhuvneshwar Kumar, Axar Patel, Ajinkya Rahane, Suresh Raina, Ambati Rayudu, Mohit Sharma, Rohit Sharma, Umesh Yadav, Gurkeerat Singh, Amit Mishra.
T20 squad: Mahendra Singh Dhoni (captain), Ravichandran Ashwin, Stuart Binny, Shikhar Dhawan, Virat Kohli, Bhuvneshwar Kumar, Axar Patel, Ajinkya Rahane, Suresh Raina, Ambati Rayudu, Mohit Sharma, Rohit Sharma, Sreenath Aravind, Harbhajan Singh, Amit Mishra.