如何在Pandas中使用transpose()函数后删除多余的行(或列)

20

在对数据框执行转置操作后,始终会有一个额外的行作为初始数据框索引的余数,例如:

import pandas as pd

df = pd.DataFrame({'fruit':['apple','banana'],'number':[3,5]})
df
    fruit  number
0   apple       3
1  banana       5
df.transpose()
        0       1
fruit   apple  banana
number      3       5

即使我没有索引:

df.reset_index(drop = True, inplace = True)
df
    fruit  number
0   apple       3
1  banana       5

df.transpose()
        0       1
fruit   apple  banana
number      3       5
问题在于当我通过以下方式将数据框保存为CSV文件时:
df.to_csv(f)

这一行多余的内容总是停留在顶部,每次都需要手动删除。

另外这个方法不起作用:

 df.to_csv(f, index = None)

由于旧索引不再被视为索引(只是另一行...),所以出现了这种情况。

当我反向转置时也发生了这种情况,我得到了一个无法删除的额外列。

有什么提示吗?


2
print df.T.to_csv(header=None) 或者 print df.to_csv(index=None) 都可以。 - piRSquared
哦,谢谢,我没有意识到这实际上是一个标题。在我的情况下有效的解决方案是 df.T.to_csv(f, header=None),假设 df 是原始数据帧(我想要转置)。另外,我不明白为什么你要加上 print - Helena K
1
在Pandas中,数据框总是必须有索引和标题,如果您没有提供它,它会给您整数。当您转置时,只需交换索引和标题维度即可。 - Jeff
3个回答

18

我遇到了同样的问题,我通过在执行transpose之前重置索引来解决它。我的意思是 df.set_index('fruit').transpose()

import pandas as pd

df = pd.DataFrame({'fruit':['apple','banana'],'number':[3,5]})
df
    fruit   number
0   apple   3
1   banana  5

执行 df.set_index('fruit').transpose() 后,结果如下:

fruit   apple   banana
number  3       5

1
这个解决方案花了很长时间才找到。谢谢! - Brad123

12

不要删除额外的索引,为什么不尝试设置你想要的新索引,然后使用切片呢?

步骤1:设置您想要的新索引:
df.columns = df.iloc[0]
步骤2:创建一个新的数据帧并删除额外的行。
df_new = df[1:]


0

如果您不希望其中一列保持索引(尤其是在使用较大的数据集时),并且想要有一个数值索引,您可以使用以下方法:

#Create df
df = pd.DataFrame({'fruit':['apple','banana'],'number':[3,5]})
#Set the first column as the index + transpose it
df = df.set_index(df.columns[0]).transpose()
#Rename the index with the name of your first column + reset index
df = df.rename_axis("fruit").reset_index()
#Remove the index name
df = df.rename_axis(None, axis = 1)

#Result
    fruit  apple  banana
0  number      3       5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接