Python重命名Pandas DataFrame列

16
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()获得了一个意外的关键字参数“columns”。如果我这样做也不起作用,

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

我弄不清楚为什么,所有的文档都告诉我我列名的调用是正确的。我只想将我的“均值”调用创建的空白列重命名为字符串索引。有人知道为什么或如何解决这个问题吗?我看到的所有示例都遵循这个格式。谢谢。


你尝试过使用 Pandas 直接读取文件吗?例如:pd.read_csv(datafile, delimiter='\t') 或类似的方法? - mauve
4个回答

14

如果我理解正确,你可以这样做。

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

1
这个方法非常有效,对我来说,中间的方法似乎是最清晰和最直接的阅读方式。谢谢。 - Will
1
这也是我的个人最爱。但我想写下几个选项。 - rpanai

9
我遇到了相同的问题,并且也对问题感到困惑。当您调用以下代码时:
df.groupby(...)["p"]....rename(columns={1:"mean"}) rename() 是在 DataFrame["p"] 上调用的,该语句返回一个 Series 对象而不是 DataFrame 对象。Series 对象的 rename() 函数没有列参数(因为只有一个“列”)。有时 Pandas 会隐式地将 Series 对象转换为 DataFrame,因此很容易忽略这一点。您可以选择使用以下方式来编写代码: pd.Series.to_frame(df.groupby(...)["p"].mean().reset_index(), name='mean')

2
我认为这应该可以工作:

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

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

0

我认为问题出在你调用时的事实:

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

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