如何在函数中重新索引 pandas 数据框?
How to reindex a pandas dataframe within a function?
我正在尝试将具有空值的列 headers 添加到我的数据框 (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
也不起作用。我在这里做错了什么?
Pandas df.reindex()
生成一个新对象,除非索引是等效的,因此您需要 return 从您的函数中获取新对象。
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)
不确定这是您在实际代码中犯的错误还是您在此处输入时犯的错误,但 tolist()
是一个函数,您必须添加方括号。
df = df.reindex(columns=df.columns.tolist() + list_of_newcols)
您不需要设置 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
我正在尝试将具有空值的列 headers 添加到我的数据框 (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
也不起作用。我在这里做错了什么?
Pandas df.reindex()
生成一个新对象,除非索引是等效的,因此您需要 return 从您的函数中获取新对象。
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)
不确定这是您在实际代码中犯的错误还是您在此处输入时犯的错误,但 tolist()
是一个函数,您必须添加方括号。
df = df.reindex(columns=df.columns.tolist() + list_of_newcols)
您不需要设置 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