如何重命名数据框索引并使其从1开始计数,而不破坏标题?

huangapple go评论73阅读模式
英文:

How do I rename a dataframe index and make it count from 1 without fragmenting the header?

问题

我想要一个从“1”开始的数据框,并且我想要重命名索引。

不管这些操作的顺序如何,我只是想确保标题不会分散。

这肯定是一个重复的问题,但我似乎找不到它!

这不起作用:

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df.index += 1
df.rename_axis('rank')

也不起作用:

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df.rename_axis('rank')
df.index += 1

期望的结果:

rank    A	B	
   1	1	4
   2	2	5
   3	3	6
英文:

I want a dataframe where the index starts from 1. I also want to rename the index.

It doesn't matter what order these operations are performed, I just want to ensure that the header isn't fragmented.

This is surely a duplicate question, but I can't seem to find it(!)

This doesn't work:

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df.index += 1
df.rename_axis('rank')

>>>
        A	B
rank		
   1	1	4
   2	2	5
   3	3	6

Nor does this:

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df.rename_axis('rank')
df.index += 1

>>>
	A	B
1	1	4
2	2	5
3	3	6

Desired result:

rank    A	B	
   1	1	4
   2	2	5
   3	3	6

答案1

得分: 1

In short, the index name is not a header and therefore will not be on the same line by default.

Option 1) Best for printing

Print you dataframe in another way, e.g. use df.to_markdown or best tabulate

from tabulate import tabulate
print(tabulate(df, headers=["rank"]+list(df.columns)))

Option 2)

You could make your own "index" column and "hide" the index, but in general that is not a good idea as the dataframe loses functionality!
Only use this for printing.

df["rank"] = df.index + 1
df.index = [""]*len(df)

Option 3)

you could slightly cheat by naming your first column rank but put only empty strings inside. In that case remember that you did it.

df["rank"] = ""
df.columns = ["rank"] + [c for c in df.columns if c != "rank"] # you can do this in other ways too
df.index += 1

There might be a print option for pandas, but I haven't seen it yet.

英文:

In short, the index name is not a header and therefore will not be on the same line by default.

Option 1) Best for printing

Print you dataframe in another way, e.g. use df.to_markdown or best tabulate

from tabulate import tabulate
print(tabulate(df, headers=["rank"]+list(df.columns)))

Option 2)

You could make your own "index" column and "hide" the index, but in general that is not a good idea as the dataframe loses functionality!
Only use this for printing.

df["rank"] = df.index + 1
df.index = [""]*len(df)

Option 3)

you could slightly cheat by naming your first column rank but put only empty strings inside. In that case remember that you did it.

df["rank"] = ""
df.columns = ["rank"] + [c for c in df.columns if c != "rank"] # you can do this in other ways too
df.index += 1

There might be a printoption for pandas, but I haven't seen it yet.


答案2

得分: 1

rename_axis 不是原地操作,而是返回一个新的 DataFrame。您需要将输出分配给一个变量:

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df.index += 1
df = df.rename_axis('rank')

print(df)

如果您想要一条命令,可以使用 Index.rename

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

df.index = df.index.rename('rank') + 1

print(df)

修改后的 df

      A  B
rank      
1     1  4
2     2  5
3     3  6

如果您希望在同一级别上显示它,请使用 reset_indexto_string

print(df.reset_index().to_string(index=False))

输出:

 rank  A  B
    1  1  4
    2  2  5
    3  3  6
英文:

rename_axis is not in place, but returns a new DataFrame. You would need to assign the output:

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df.index += 1
df = df.rename_axis('rank')

print(df)

If you want a single command, use Index.rename:

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

df.index = df.index.rename('rank')+1

print(df)

Modified df:

      A  B
rank      
1     1  4
2     2  5
3     3  6

If you want to display it on the same level, use reset_index and to_string:

print(df.reset_index().to_string(index=False))

Output:

 rank  A  B
    1  1  4
    2  2  5
    3  3  6

huangapple
  • 本文由 发表于 2023年7月6日 18:33:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/76627915.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定