Pandas 使用列名而不是索引的数据帧转置抛出 ValueError
Pandas dataframe transpose with column name instead of index throws ValueError
我试图在转置数据帧后在 json 中显示实际的列名,下面的代码适用于 sql 中的 LIMIT 3 但如果我尝试 LIMIT 5 失败请问有什么想法吗?
from pandasql import *
pysqldf = lambda q: sqldf(q, globals())
q1 = """
SELECT
beef as beef, veal as veal, pork as pork, lamb_and_mutton as lamb
FROM
meat m
LIMIT 5;
"""
meat = load_meat()
df = pysqldf(q1)
#print(df.to_json(orient='records'))
hdf = pd.DataFrame(df)
print(hdf.T.reset_index().set_axis(range(len(hdf.columns)), axis=1, inplace=False).to_json(orient='records'))
错误
'values have {new} elements'.format(old=old_len, new=new_len))
ValueError: Length mismatch: Expected axis has 6 elements, new values have 4 elements
在你 T
和 reset_index
之后,你又增加了一个 columns
,同时 index
的长度等于 columns
在转置之前,所以你应该使用 shape
print(hdf.T.reset_index().set_axis(range(hdf.shape[0]+1), axis=1, inplace=False).to_json(orient='records'))
试试这个:
df.T.reset_index()\
.set_axis(range(len(df)+1), axis=1, inplace=False)\
.to_json(orient='records')
注意:问题是在转置后重命名列,您需要长度为原始数据帧中的行数加 1 作为索引。
输出:
'[{"0":"beef","1":0,"2":4,"3":8,"4":12,"5":16},{"0":"veal","1":1,"2":5,"3":9,"4":13,"5":17},{"0":"pork","1":2,"2":6,"3":10,"4":14,"5":18},{"0":"lamb","1":3,"2":7,"3":11,"4":15,"5":29}]'
我试图在转置数据帧后在 json 中显示实际的列名,下面的代码适用于 sql 中的 LIMIT 3 但如果我尝试 LIMIT 5 失败请问有什么想法吗?
from pandasql import *
pysqldf = lambda q: sqldf(q, globals())
q1 = """
SELECT
beef as beef, veal as veal, pork as pork, lamb_and_mutton as lamb
FROM
meat m
LIMIT 5;
"""
meat = load_meat()
df = pysqldf(q1)
#print(df.to_json(orient='records'))
hdf = pd.DataFrame(df)
print(hdf.T.reset_index().set_axis(range(len(hdf.columns)), axis=1, inplace=False).to_json(orient='records'))
错误
'values have {new} elements'.format(old=old_len, new=new_len))
ValueError: Length mismatch: Expected axis has 6 elements, new values have 4 elements
在你 T
和 reset_index
之后,你又增加了一个 columns
,同时 index
的长度等于 columns
在转置之前,所以你应该使用 shape
print(hdf.T.reset_index().set_axis(range(hdf.shape[0]+1), axis=1, inplace=False).to_json(orient='records'))
试试这个:
df.T.reset_index()\
.set_axis(range(len(df)+1), axis=1, inplace=False)\
.to_json(orient='records')
注意:问题是在转置后重命名列,您需要长度为原始数据帧中的行数加 1 作为索引。
输出:
'[{"0":"beef","1":0,"2":4,"3":8,"4":12,"5":16},{"0":"veal","1":1,"2":5,"3":9,"4":13,"5":17},{"0":"pork","1":2,"2":6,"3":10,"4":14,"5":18},{"0":"lamb","1":3,"2":7,"3":11,"4":15,"5":29}]'