如何在函数中修改pandas DataFrame,以便调用者看到更改?

Cha*_*imG 6 python pandas

我发现自己正在对各种[pandas][1]DataFrame 执行重复性任务,所以我做了一个函数来进行处理.如何修改df函数process_df(df)以便调用者看到所有更改(不指定返回值)?

代码的简化版本:

def process_df(df):
    df.columns = map(str.lower, df.columns)

df = pd.DataFrame({'A': [1], 'B': [2]})
process_df(df)
print df
Run Code Online (Sandbox Code Playgroud)
   A  B 
0  1  2
Run Code Online (Sandbox Code Playgroud)

编辑新代码:

def process_df(df):
    df = df.loc[:, 'A']

df = pd.DataFrame({'A': [1], 'B': [2]})
process_df(df)
print df
Run Code Online (Sandbox Code Playgroud)
   A  B 
0  1  2
Run Code Online (Sandbox Code Playgroud)

Igo*_*ush 5

一个索引DataFrame使用ixlociloc等返回底层数据(它是一个读操作)的视图。为了修改框架的内容,您将需要使用就地转换。例如,

def process_df(df):
    # drop all columns except for A
    df.drop(df.columns[df.columns != 'A'], axis=1, inplace=True)

df = DataFrame({'A':[1,2,3], 'B':[1,2,3]})
process_df(df)
Run Code Online (Sandbox Code Playgroud)

要更改列的顺序,您可以执行以下操作:

def process_df(df):
    # swap A and B
    df.columns = ['B', 'A']
    df[['B', 'A']] = df[['A', 'B']]
Run Code Online (Sandbox Code Playgroud)