我有一个这样的列表清单。
sports = [['Sport', 'Country(s)'], ['Foot_ball', 'brazil'], ['Volleyball', 'Argentina', 'India'], ['Rugger', 'New_zealand', ‘South_africa’], ['Cricket', 'India'], ['Carrom', 'Uk', ‘Usa’], ['Chess', 'Uk']]
我要使用上述列表创建熊猫数据框,如下所示:
sport Country(s)
Foot_ball brazil
Volleyball Argentina
Volleyball india
Rugger New_zealnd
Rugger South_africa
Criket India
Carrom UK
Carrom Usa
Chess UK
我正尝试这样
sport_x = []
for x in sports[1:]:
sport_x.append(x[0])
print(sport_x)
country = []
for y in sports[1:]:
country.append(y[1:])
header = sports[0]
df = pd.DataFrame([sport_x,country], columns = header)
中途通过,我遇到此错误 但是我遇到了这个错误。
AssertionError: 2 columns passed, passed data had 6 columns
任何建议,如何执行。
答案 0 :(得分:2)
类似的事情是首先“扩展”不规则形状的行,然后对其进行数据构图。
>>> sports = [
["Sport", "Country(s)"],
["Foot_ball", "brazil"],
["Volleyball", "Argentina", "India"],
["Rugger", "New_zealand", "South_africa"],
["Cricket", "India"],
["Carrom", "Uk", "Usa"],
["Chess", "Uk"],
]
>>> expanded_sports = []
>>> for row in sports:
... for country in row[1:]:
... expanded_sports.append((row[0], country))
...
>>> pd.DataFrame(expanded_sports[1:], columns=expanded_sports[0])
Sport Country(s)
0 Foot_ball brazil
1 Volleyball Argentina
2 Volleyball India
3 Rugger New_zealand
4 Rugger South_africa
5 Cricket India
6 Carrom Uk
7 Carrom Usa
8 Chess Uk
>>>
EDIT :另一种使用.melt()
的解决方案,但是对我来说这看起来很丑,而且顺序也不相同。
>>> pd.DataFrame(sports[1:]).melt(0, value_name='country').dropna().drop('variable', axis=1).rename({0: 'sport'}, axis=1)
sport country
0 Foot_ball brazil
1 Volleyball Argentina
2 Rugger New_zealand
3 Cricket India
4 Carrom Uk
5 Chess Uk
7 Volleyball India
8 Rugger South_africa
10 Carrom Usa
答案 1 :(得分:1)
或者,熊猫使用explode
并理解列表:
df=pd.DataFrame([[i[0],','.join(i[1:])] if len(i)>2 else i for i in sports[1:]],
columns=sports[0])
df['Country(s)']=df['Country(s)'].str.split(',')
final=df.explode('Country(s)').reset_index(drop=True)
Sport Country(s)
0 Foot_ball brazil
1 Volleyball Argentina
2 Volleyball India
3 Rugger New_zealand
4 Rugger South_africa
5 Cricket India
6 Carrom Uk
7 Carrom Usa
8 Chess Uk