使用Python、Pandas和Excel发布的列;;

使用Python、Pandas和Excel发布的列;;,python,excel,pandas,Python,Excel,Pandas,我正在尝试使用python和pandas处理Excel文件。此文件包含大量的列和行,但我将尝试使用以下示例来简化: Name Age Nationality Name1 Age1 Nationality1 Name2 Age2 Nationality2 Jane 32 Canada Pedro 25 Spain

我正在尝试使用python和pandas处理Excel文件。此文件包含大量的列和行,但我将尝试使用以下示例来简化:

Name    Age  Nationality    Name1   Age1    Nationality1    Name2   Age2    Nationality2
Jane    32   Canada                     
Pedro   25   Spain                      
                            Lucas    30      Italy          
                             Ana     23      Germany            
                                                            Pedro    43      Brazil
                                                            Lucas    32      Mexico

因此,在这个例子中,我有列:姓名、年龄和国籍。但是,我也有名字、年龄和国籍。。因为我想按它的值过滤它,所以它不起作用,因为我必须过滤每一个:Name、Name1和Name2

我认为这可能是一个转换到不同词典并尝试过滤这些词典的选项。。但是考虑到列和行的数量,我想这需要更长的时间

我还想知道是否可以重命名这些列,但我搜索后发现它必须有唯一的名称。。如果我错了,请纠正我

有人能解决这个问题吗?会很有帮助的。
提前感谢

您可以将所有列标题放入列表中。你能更具体地说你想要什么样的最终结果吗

列表(my_dataframe.columns.values)
您可以使用
bfill(axis=1)
将每行中的第一个非空值复制到前一列中。在循环的第一次迭代中,所有名称列都将成功填充。如果将其设置为索引,然后将df中出现的所有其他名称替换为NaN,则可以在其余列上重复该过程,并最终得到所需的名称

import pandas as pd
import numpy as np

df = pd.read_csv('name_age_nationality.csv')

    Name   Age Nationality  Name1  Age1 Nationality1  Name2  Age2 Nationality2
0   Jane  32.0      Canada    NaN   NaN          NaN    NaN   NaN          NaN
1  Pedro  25.0       Spain    NaN   NaN          NaN    NaN   NaN          NaN
2    NaN   NaN         NaN  Lucas  30.0        Italy    NaN   NaN          NaN
3    NaN   NaN         NaN    Ana  23.0      Germany    NaN   NaN          NaN
4    NaN   NaN         NaN    NaN   NaN          NaN  Pedro  43.0       Brazil
5    NaN   NaN         NaN    NaN   NaN          NaN  Lucas  32.0       Mexico

for x in ['Name','Age','Nationality']:
   df = df.bfill(axis=1).set_index(x)
   df = df.replace(df.index.values,np.nan).reset_index()

df[['Name','Age','Nationality']]
输出

    Name Age Nationality
0   Jane  32      Canada
1  Pedro  25       Spain
2  Lucas  30       Italy
3    Ana  23     Germany
4  Pedro  43      Brazil
5  Lucas  32      Mexico

列是否总是按顺序排列,即姓名、年龄、国籍?是否可能是
姓名、年龄、国籍、国籍1、年龄1、姓名1
能否请您发布一个示例,说明您希望输出的内容。@datanovel,不完全是。。我想我可以更清楚地回答我的问题。。对不起。但是我们可以说我们也可以有“昵称,性别”。但是这些并不重复,它们在两个序列之间:“姓名,年龄,国籍”“昵称”“姓名1,年龄1,国籍1”“性别”“姓名2,年龄2,国籍2“@Chris,我只想一行写名字,另一行写年龄,另一行写国籍..”。。这样我就可以按名字过滤,比如:“佩德罗”。然后我会有两个结果。一名来自西班牙,25人;另一名来自巴西,43人。如果我想知道这张数据表中有多少人叫佩德罗,来自西班牙,那么我可以按年龄或国籍再次筛选。@Phil你能添加一些数据样本,模仿你上面所说的吗?