如何在函数中重新索引熊猫数据框?
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
【讨论】:
以上是关于如何在函数中重新索引熊猫数据框?的主要内容,如果未能解决你的问题,请参考以下文章