Pandas 去掉NaN值并重新排列列的顺序
我制作了一个您可以运行的特别示例,向您展示了一个类似于我必须使用的df3的数据帧:Pandas 去掉NaN值并重新排列列的顺序,pandas,dataframe,nan,Pandas,Dataframe,Nan,我制作了一个您可以运行的特别示例,向您展示了一个类似于我必须使用的df3的数据帧: people1 = [['Alex',10],['Bob',12],['Clarke',13],['NaN',],['NaN',],['NaN',]] people2 = [['NaN',],['NaN',],['NaN',],['Mark',20],['Jane',22],['Jack',23]] df1 = pd.DataFrame(people1,columns=['Name','Age']) df2 =
people1 = [['Alex',10],['Bob',12],['Clarke',13],['NaN',],['NaN',],['NaN',]]
people2 = [['NaN',],['NaN',],['NaN',],['Mark',20],['Jane',22],['Jack',23]]
df1 = pd.DataFrame(people1,columns=['Name','Age'])
df2 = pd.DataFrame(people2,columns=['Name','Age'])
people_list=[df1, df2]
df3 = pd.concat((people_list[0]['Name'], people_list[1]['Name']), axis=1)
df3
如何修改数据帧df3以去除NaN值并将两列相邻放置(我不在乎保留id,我只想要一个两列相邻的干净数据帧)?您可以先删除NaN值:
df3 = pd.concat([df1.dropna(), df2.dropna()])
输出:
Name Age
0 Alex 10.0
1 Bob 12.0
2 Clarke 13.0
3 Mark 20.0
4 Jane 22.0
5 Jack 23.0
Name Name
0 Alex Mark
1 Bob Jane
2 Clarke Jack
或者,如果您想并排联系:
df3 = pd.concat([df1.dropna().reset_index(drop=True), df2.dropna().reset_index(drop=True)], 1)
df3 = pd.concat([df1.dropna().reset_index(drop=True)['Name'], df2.dropna().reset_index(drop=True)['Name']], 1)
输出:
Name Age Name Age
0 Alex 10.0 Mark 20.0
1 Bob 12.0 Jane 22.0
2 Clarke 13.0 Jack 23.0
Name Name
0 Alex Mark
1 Bob Jane
2 Clarke Jack
如果您只想并排查看名称
列:
df3 = pd.concat([df1.dropna().reset_index(drop=True), df2.dropna().reset_index(drop=True)], 1)
df3 = pd.concat([df1.dropna().reset_index(drop=True)['Name'], df2.dropna().reset_index(drop=True)['Name']], 1)
输出:
Name Age Name Age
0 Alex 10.0 Mark 20.0
1 Bob 12.0 Jane 22.0
2 Clarke 13.0 Jack 23.0
Name Name
0 Alex Mark
1 Bob Jane
2 Clarke Jack
如果只想修改df3,可以通过iloc
和dropna
完成:
df3 = pd.concat([df3.iloc[:,0].dropna().reset_index(drop=True) , df3.iloc[:,1].dropna().reset_index(drop=True)],1)
输出:
Name Age
0 Alex 10.0
1 Bob 12.0
2 Clarke 13.0
3 Mark 20.0
4 Jane 22.0
5 Jack 23.0
Name Name
0 Alex Mark
1 Bob Jane
2 Clarke Jack
如果我正确理解了你的意思,这是一个可能的解决办法
people1 = [['Alex',10],['Bob',12],['Clarke',13],['NaN',],['NaN',],['NaN',]]
people2 = [['NaN',],['NaN',],['NaN',],['Mark',20],['Jane',22],['Jack',23]]
df1 = pd.DataFrame(people1,columns=['Name1','Age']).dropna()
df2 = pd.DataFrame(people2,columns=['Name2','Age']).dropna().reset_index()
people_list=[df1, df2]
df3 = pd.concat((people_list[0]['Name1'], people_list[1]['Name2']), axis=1)
print(df3)
Name1 Name2
0 Alex Mark
1 Bob Jane
2 Clarke Jack
如果您已经拥有该数据帧:
count = df3.Name2.isna().sum()
df3.loc[:, 'Name2'] = df3.Name2.shift(-count)
df3 = df3.dropna()
print(df3)
Name1 Name2
0 Alex Mark
1 Bob Jane
2 Clarke Jack
这将帮助您连接两个df我的意思是您已经拥有了df3!(在代码中,我不得不构建一个假的示例,以获得一个与我所面临的示例类似的数据帧)。因此,您不能修改构建它的方式,因为它已经是这样了@GiacomoF更新了答案忘了代码,我只是为了得到df3才编出来的。假设您得到了一个类似fd3的数据帧,您必须修改它以获得一个没有NaN值的数据帧,并且两列相邻。你会怎么做?答案的第二部分是关于这个。对!谢谢