pandas 如何将一个函数的输出用于另一个函数

jfewjypa  于 2023-01-07  发布在  其他
关注(0)|答案(2)|浏览(111)

我有一个函数可以根据一个文件的内容来创建print

import pandas as pd

def DataFrameConverter(file):

    T = pd.read_fwf(file, header= None, names=['1','2','3','4','5','6','7','8','9'])
    T = T.rename(index={0:'A',1:'B',2:'C',3:'D',4:'E',5:'F',6:'G',7:'H',8:'I'})

    df = pd.DataFrame(T)
    print(df)

以及被认为允许用户通过用用户输入替换'X'值来修改DataFrame的函数:

def modifyDF(variable):

    while df.isin(['X']).any().any():
        
        print('')
        x = input('row: ')
        y = input('col: ')
        v = input('value: ')
        print('')
        
        df.loc[x,y] = v
        print(df)

现在我想让用户输入一个文件名,读取DataFrame,然后让用户修改它,我试着调用转换函数,并像这样保存结果:

variable = DataFrameConverter(file = input('File name: '))

然后像这样传递

modifyDF(variable)

但是,我收到错误消息,说df没有定义。代码有什么问题?如何使modifyDF使用由DataFrameConverter创建的DataFrame

zour9fqk

zour9fqk1#

在不知道您希望实现什么的确切细节的情况下,我认为您所得到的是希望从第一个函数返回 Dataframe 以供稍后使用。

import pandas as pd

def DataFrameConverter(file):
    T = pd.read_fwf(file, header=None, names=[
                    '1', '2', '3', '4', '5', '6', '7', '8', '9'])
    T = T.rename(index={0: 'A', 1: 'B', 2: 'C', 3: 'D',
                 4: 'E', 5: 'F', 6: 'G', 7: 'H', 8: 'I'})
    df = pd.DataFrame(T)
    print(df)
    return df

data_frame = DataFrameConverter(file=input('File name: '))

def modifyDF(data_frame):
    df = data_frame
    while df.isin(['X']).any().any():
        print('')
        x = input('row: ')
        y = input('col: ')
        v = input('value: ')
        print('')
        df.loc[x, y] = v
        print(df)

modifyDF(data_frame)

或者您可能希望使用每个函数都可以访问的全局变量:

import pandas as pd

df: pd.DataFrame = None
def DataFrameConverter(file):
    T = pd.read_fwf(file, header=None, names=[
                    '1', '2', '3', '4', '5', '6', '7', '8', '9'])
    T = T.rename(index={0: 'A', 1: 'B', 2: 'C', 3: 'D',
                 4: 'E', 5: 'F', 6: 'G', 7: 'H', 8: 'I'})
    df = pd.DataFrame(T)
    print(df)

DataFrameConverter(file=input('File name: '))

def modifyDF():
    while df.isin(['X']).any().any():
        print('')
        x = input('row: ')
        y = input('col: ')
        v = input('value: ')
        print('')
        df.loc[x, y] = v
        print(df)

modifyDF()
juzqafwq

juzqafwq2#

得到你想要的最小值

在DataFrameConverter函数中,实际上并不返回任何结果。
我想如果你换句台词:

print(df)

将成为:

return (df)

你会得到你想要的。

旁注

  • 有一个名为"variable"的变量是字面上的眼睛癌。因为它是一个Pandas Dataframe ,我会把它存储为"df"或"dataframe"。
  • DataFrameConverter实际上只是从一个文本文件中读取一个panda Dataframe ,所以如果你有像"read_data"和"modify_data"这样的函数名,你的代码会更容易理解。

相关问题