将当前列名更改为行,并替换为其他列名

2024-06-10 05:30:24 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我有一个混乱的数据框,其中行值显示为列名。现在我要做的是将那些显示为列名的行值更改为行,并用其他列名替换它们。这是原始数据帧的外观:

# dictionary of lists 
dict = {'Erick':["aparna", "pankaj", "sudhir", "Geeku"], 
        'MBA': ["MBA", "BCA", "M.Tech", "MBA"], 
        '80':[90, 40, 80, 98]} 

df = pd.DataFrame(dict) 

print(df)

现在我确实想将这些列名更改为一行,并替换为新列名 以下是预期产出

# dictionary of lists 
dict = {'Name':["Erick","aparna", "pankaj", "sudhir", "Geeku"], 
        'Degree': ["MBA","MBA", "BCA", "M.Tech", "MBA"], 
        'Score':[80,90, 40, 80, 98]} 

df = pd.DataFrame(dict) 

print(df)

请帮忙


Tags: ofdfdictionarydicttechlistspderick
3条回答

这是一个超具体的问题,所以我知道有一个非常巧妙的答案,但我还是尝试了。你知道吗

考虑到另一个数组的键顺序正确,可以执行以下操作:

dict = {'Erick':["aparna", "pankaj", "sudhir", "Geeku"], 
        'MBA': ["MBA", "BCA", "M.Tech", "MBA"], 
        '80':[90, 40, 80, 98]} 

new_dict_keys = ['Name', 'Degree', 'Score']
new_dict = {}

for i, key in enumerate(dict.keys()):
    try:
        dict[key].append(int(key))
    except Exception as e:
        dict[key].append(key)

    new_dict[new_dict_keys[i]] = dict[key]

print(new_dict)

请记住,您的new_dict_keys数组的顺序必须正确,才能正常工作。 否则,您也可以这样做:

new_dict = {'Name': 'Erick', 'Degree': 'MBA', 'Score': '80'}

for i, key in enumerate(new_dict.keys()):
    try:
        dict[new_dict[key]].append(int(new_dict[key]))
    except Exception as e:
        dict[new_dict[key]].append(new_dict[key])

    new_dict[key] = dict[new_dict[key]]

print(new_dict)

两者都返回所需的输出:

{
'Name': ['aparna', 'pankaj', 'sudhir', 'Geeku', 'Erick'], 
'Degree': ['MBA', 'BCA', 'M.Tech', 'MBA', 'MBA'], 
'Score': [90, 40, 80, 98, 80]
}

如何包含新的键名取决于您。你知道吗

最后一件事:不要将dict作为变量名,它是python关键字,因此不应该用作变量名。你知道吗

您还可以尝试以下代码以获得所需的输出:

dict = {'Erick':["aparna", "pankaj", "sudhir", "Geeku"], 
        'MBA': ["MBA", "BCA", "M.Tech", "MBA"], 
        '80':[90, 40, 80, 98]}

df = (pd.DataFrame(dict).T.reset_index().T.reset_index()).drop(['index'],axis=1)
df.columns = ['Name','Degree','Score']
print(df)

请让我知道,如果这个代码为您工作。你知道吗

一个想法是从列和^{}原始数据创建一行DataFrame

df = df.columns.to_series().to_frame().T.append(df, ignore_index=True)
df.columns = ['Name','Degree','Score']
print(df)
     Name  Degree Score
0   Erick     MBA    80
1  aparna     MBA    90
2  pankaj     BCA    40
3  sudhir  M.Tech    80
4   Geeku     MBA    98

或使用^{}

df.loc[-1] = df.columns
df = df.sort_index().reset_index(drop=True)
df.columns = ['Name','Degree','Score']
print(df)
     Name  Degree Score
0   Erick     MBA    80
1  aparna     MBA    90
2  pankaj     BCA    40
3  sudhir  M.Tech    80
4   Geeku     MBA    98

或者通过构造函数创建DataFrame,通过字典创建rename列:

#change dict in DataFrame constructor and reset builtins for avoid
#TypeError: 'dict' object is not callable
import builtins
dict = builtins.dict

d = {'Erick':["aparna", "pankaj", "sudhir", "Geeku"], 
        'MBA': ["MBA", "BCA", "M.Tech", "MBA"], 
        '80':[90, 40, 80, 98]} 

df = pd.DataFrame(d) 


c = ['Name','Degree','Score']
df = pd.DataFrame([df.columns], columns=c).append(df.rename(columns=dict(zip(df.columns, c))), 
                  ignore_index=True)
print(df)
     Name  Degree Score
0   Erick     MBA    80
1  aparna     MBA    90
2  pankaj     BCA    40
3  sudhir  M.Tech    80
4   Geeku     MBA    98

相关问题 更多 >