如何在一个函数中修改pandas DataFrame,从而使调用者看到变化?[英] How to modify a pandas DataFrame in a function so that changes are seen by the caller?

本文是小编为大家收集整理的关于如何在一个函数中修改pandas DataFrame,从而使调用者看到变化?的处理方法,想解了如何在一个函数中修改pandas DataFrame,从而使调用者看到变化?的问题怎么解决?如何在一个函数中修改pandas DataFrame,从而使调用者看到变化?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我发现自己对各种 [pandas][1] DataFrames 执行重复性任务,因此我创建了一个函数来进行处理.如何修改函数 process_df(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
<块引用>
   A  B 
0  1  2

编辑新代码:

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

df = pd.DataFrame({'A': [1], 'B': [2]})
process_df(df)
print df
<块引用>
   A  B 
0  1  2

推荐答案

Indexing a DataFrame using ix, loc, iloc, etc. 返回底层数据的视图(这是一个读取操作).为了修改框架的内容,您需要使用就地转换.例如,

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)

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

def process_df(df):
    # swap A and B
    df.columns = ['B', 'A']
    df[['B', 'A']] = df[['A', 'B']]

本文地址:https://www.itbaoku.cn/post/1727907.html