Python 重命名 Pandas DataFrame 列

Posted

技术标签:

【中文标题】Python 重命名 Pandas DataFrame 列【英文标题】:Python renaming Pandas DataFrame Columns 【发布时间】:2019-07-21 14:20:00 【问题描述】:
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")

这不起作用,它告诉我 TypeError: rename() got an unexpected keyword argument "columns"。如果我这样做,它也不起作用,

avg.rename(columns = 1:"mean", inplace=True)

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

【问题讨论】:

您是否尝试过直接使用 pandas...pd.read_csv(datafile, delimiter = '\t') 或类似方法读取文件? 【参考方案1】:

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")

avg = df.groupby("b", sort=False)["a"].mean().reset_index()\
        .rename(columns="a":"mean")

avg = df.groupby("b", sort=False, as_index=False)["a"].mean()\
        .reset_index()\
        .rename(columns="a":"mean")

【讨论】:

这就像一个魅力,中间的方法对我来说似乎是最干净和最直接的。谢谢。 这也是我个人的最爱。但我想写下几个选项。【参考方案2】:

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

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')

【讨论】:

【参考方案3】:

我认为这应该可行:

avg = df.groupby(["t"], sort=False)["p"].mean().rename('mean').reset_index()

【讨论】:

这给了我 TypeError: 'str' object is not callable ... 我不确定为什么,因为我不完全理解 rename 和 reset_index 的工作方式。【参考方案4】:

我认为问题出在你打电话时:

avg = df.groupby("b", sort=False)["a"].mean().reset_index().rename(columns="a":"mean")

这一行:

avg = df.groupby("b", sort=False)["a"].mean().reset_index() 

返回pd.Series,而不是pd.DataFrame。通常,如果您删除列的参数,它应该可以工作:

avg = df.groupby("b", sort=False)["a"].mean().reset_index().rename("mean")

【讨论】:

以上是关于Python 重命名 Pandas DataFrame 列的主要内容,如果未能解决你的问题,请参考以下文章

Python 重命名 Pandas DataFrame 列

python pandas以相同的方式重命名多个列标题

python pandas:重命名数据框中的系列?

python pandas:重命名多索引数据框中的单列标签

从 Pandas 聚合中重命名结果列(“FutureWarning:不推荐使用带有重命名的字典”)

使用 Pandas 重命名 excel 的列