You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas DataFrame的整行id转为列标题?附代码修改需求

问题:将DataFrame的行转为列标题

我写了一段处理JSON数据并生成DataFrame的代码:

class Decoder(json.JSONDecoder):
    def decode(self, s):
        result = super(Decoder, self).decode(s)
        return self._decode(result)
    def _decode(self, o):
        if isinstance(o, str):
            try:
                return int(o)
            except ValueError:
                try:
                    return float(o)
                except ValueError:
                    return o
        elif isinstance(o, dict):
            return {k: self._decode(v) for k, v in o.items()}
        elif isinstance(o, list):
            return [self._decode(v) for v in o]
        else:
            return o

with open('ouput_data.json') as f:
    data=json.load(f,cls=Decoder)
#print(data)
list=[]
list=(data['data'])
df = pd.DataFrame(list,columns=['id','value'])
support_df = pd.DataFrame({'id':range(1,10),'value_aux':''})
final_df = support_df.merge(df,how='left')
final_df['value'] = np.where(final_df['value'].isna(),final_df['value_aux'],final_df['value'])
#print(final_df)
final_df = final_df.drop(columns='value_aux')
#final_df=final_df.drop(['id'],axis=1)
final_df=final_df.T
print(final_df)

当前final_df的输出如下:

0  1  2  3          4          5  6  7  8
id    1  2  3  4          5          6  7  8  9
value NY 11  D 531293696 5202013

可见id为单独一行,value为单独一行。我需要将整行id转为DataFrame的列标题,请问该如何修改代码?若能直接给出修改后的代码将十分感谢。


解决方案

你只需要在转置后把id行的值设为列名,再删除原id行即可。另外注意不要用list作为变量名(会覆盖Python内置类型),我也帮你调整了这个小问题。修改后的完整代码如下:

import json
import pandas as pd
import numpy as np

class Decoder(json.JSONDecoder):
    def decode(self, s):
        result = super(Decoder, self).decode(s)
        return self._decode(result)
    def _decode(self, o):
        if isinstance(o, str):
            try:
                return int(o)
            except ValueError:
                try:
                    return float(o)
                except ValueError:
                    return o
        elif isinstance(o, dict):
            return {k: self._decode(v) for k, v in o.items()}
        elif isinstance(o, list):
            return [self._decode(v) for v in o]
        else:
            return o

with open('ouput_data.json') as f:
    data=json.load(f,cls=Decoder)

# 替换list变量名,避免覆盖内置类型
data_list = data['data']
df = pd.DataFrame(data_list,columns=['id','value'])
support_df = pd.DataFrame({'id':range(1,10),'value_aux':''})
final_df = support_df.merge(df,how='left')
final_df['value'] = np.where(final_df['value'].isna(),final_df['value_aux'],final_df['value'])

final_df = final_df.drop(columns='value_aux')
final_df = final_df.T

# 核心修改:将id行设为列标题,然后删除原id行
final_df.columns = final_df.iloc[0]
final_df = final_df.drop('id')

print(final_df)

关键修改点说明:

  1. 设置列标题:final_df.columns = final_df.iloc[0] 这行代码把转置后的第一行(也就是原来的id行数值)赋值给DataFrame的列名。
  2. 删除原id行:final_df = final_df.drop('id') 移除不再需要的id行,只保留value行数据。
  3. 变量名优化:把list改为data_list,避免和Python内置的list类型冲突,减少潜在bug。

修改后你会得到这样的输出:

id      1   2  3          4          5   6   7   8   9
value  NY  11  D  531293696  5202013       

内容的提问来源于stack exchange,提问作者user11646543

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:04:17