如何在函数中重新索引熊猫数据框?

Posted

技术标签:

【中文标题】如何在函数中重新索引熊猫数据框?【英文标题】:How to reindex a pandas dataframe within a function? 【发布时间】:2019-06-10 17:49:23 【问题描述】:

我正在尝试将具有空值的列标题添加到我的数据框 (just like this answer),但在已经修改它的函数中,如下所示:

mydf = pd.DataFrame()

def myfunc(df):
  df['newcol1'] = np.nan  # this works

  list_of_newcols = ['newcol2', 'newcol3']
  df = df.reindex(columns=df.columns.tolist() + list_of_newcols)  # this does not
  return
myfunc(mydf)

如果我在 IPython 控制台中单独运行这些行,它将添加它们。但是作为脚本运行,newcol1 将被添加,但 2 和 3 不会。设置copy=False 也不起作用。我在这里做错了什么?

【问题讨论】:

【参考方案1】:

Pandas df.reindex() 会生成一个新对象,除非索引相同,因此您需要从函数中返回新对象。

def myfunc(df):
  df['newcol1'] = np.nan  # this works

  list_of_newcols = ['newcol2', 'newcol3']
  df = df.reindex(columns=df.columns.tolist + list_of_newcols)  # this does not
  return df

mydf = myfunc(mydf)

【讨论】:

那么索引等效的唯一情况是我重新排列现有的列标签? @ExcelHelp 我相信是这样,但我并不肯定。 实际上没有 - 返回一个副本,除非请求的索引实际上等于原始索引。【参考方案2】:

不确定这是您使用实际代码时还是在此处输入时所犯的错误,但tolist() 是一个函数,您必须添加括号。

df = df.reindex(columns=df.columns.tolist() + list_of_newcols)

【讨论】:

【参考方案3】:

您无需设置NaN 值并再次指定新的列标签。您可以reindex 使用任意字符串列表; NaN是未指定数据的默认值。

df = pd.DataFrame('A': [1, 2, 3])

df = df.reindex(columns=['A', 'B', 'C'])

print(df)

   A   B   C
0  1 NaN NaN
1  2 NaN NaN
2  3 NaN NaN

【讨论】:

以上是关于如何在函数中重新索引熊猫数据框?的主要内容,如果未能解决你的问题,请参考以下文章

如何重新索引熊猫数据框以将起始索引值重置为零? [重复]

如何在熊猫数据框中查找缺失的索引值?

如何在熊猫数据框输出中定义索引或点击行数?

如何在熊猫日期时间数据框中索引打开和关闭?

如何更改熊猫数据框中多索引的外层索引?

如何(重新)命名熊猫数据框中的空列标题而不导出到csv