【问题标题】:Change current column names to rows and replace with other column names将当前列名更改为行并替换为其他列名
【发布时间】:2019-11-19 19:00:02
【问题描述】:

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

# 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)

请帮忙

【问题讨论】:

  • 你想通过 pandas 还是通过 dict 来做?

标签: python pandas dataframe


【解决方案1】:

一个想法是从列和 DataFrame.append 原始数据创建 1 行 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

或者使用setting with enlargement:

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

【讨论】:

    【解决方案2】:

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

    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)
    

    如果此代码适合您,请告诉我。

    【讨论】:

      【解决方案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 关键字,因此永远不应该用作变量名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 2012-12-06
        相关资源
        最近更新 更多