Python 重命名 Pandas DataFrame 列

Wil*_*ill 9 python rename dataframe pandas

import pandas as pd
import numpy as np
datain = np.loadtxt(datafile)
df = pd.DataFrame(data = datain, columns = ["t","p","x","y","z"])
avg = df.groupby(["t"], sort=False)["p"].mean().rename(columns={1:"mean"})
Run Code Online (Sandbox Code Playgroud)

这不起作用,它告诉我 TypeError: rename() 得到了一个意外的关键字参数“columns”。如果我这样做,它也不起作用,

avg.rename(columns = {1:"mean"}, inplace=True)
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,所有文档都告诉我我的列调用是正确的。我只想将我的“mean”调用创建的空白列重命名为字符串索引。任何人都知道为什么或如何解决这个问题?我见过的所有例子都遵循这种格式。谢谢。

小智 10

我遇到了同样的问题,并且也对问题所在感到困惑。你打电话时:

df.groupby(...)["p"]....rename(columns={1:"mean"})

rename()调用该DataFrame["p"]函数会返回 Series 对象,而不是 DataFrame 对象。Series 对象的函数rename()没有列参数(因为只有 1 个“列”)。有时,pandas 会隐式地将 Series 对象转换为 DataFrame,因此很容易被忽略。你也可以写

pd.Series.to_frame(df.groupby(...)["p"].mean().reset_index(), name='mean')


rpa*_*nai 7

IIUC你可以这样做

import pandas as pd
df = pd.DataFrame({"a":np.arange(10),
                   "b":np.random.choice(["A","B"],10)})

avg = df.groupby("b", sort=False)["a"].mean()\
        .reset_index(name="mean")
Run Code Online (Sandbox Code Playgroud)

或者

avg = df.groupby("b", sort=False)["a"].mean().reset_index()\
        .rename(columns={"a":"mean"})
Run Code Online (Sandbox Code Playgroud)

或者

avg = df.groupby("b", sort=False, as_index=False)["a"].mean()\
        .reset_index()\
        .rename(columns={"a":"mean"})
Run Code Online (Sandbox Code Playgroud)