首页 > 解决方案 > AttributeError:“str”对象在通过用户输入动态传递数据框名称时没有属性“columns”

问题描述

我在下面给出了 3 个不同的熊猫数据框。我想动态传递数据框名称和列名称作为用户输入。然后它应该打印该数据框中的列。下面是我的代码。它抛出以下错误。

import pandas as pd

df1 = pd.DataFrame({"Name": ['A', 'B', 'C'], "Age": [1, 2, 3]})
df2 = pd.DataFrame({"Addr": ['D', 'E', 'F'], "PIN": [4, 5, 6]})
df3 = pd.DataFrame({"State": ['X', 'Y', 'Z'], "Phone": [7, 8, 9]})

def filter_df():
    df_name = input("Enter Datframe")
    column_name = input("Enter Column Name")
    if column_name in df_name.columns:
        print(df_name[column_name])
    else:
        print("Incorrct column Name")

filter_df(df2, 'Addr')

在调用函数并给出输入后,我得到以下错误:

Enter Datframe df1
Enter Column Name Name

Error:
if column_name in df_name.columns:
AttributeError: 'str' object has no attribute 'columns'

请告诉我如何实现这一目标?

标签: pythonpandasnumpydataframe

解决方案


You are assuming that input() will become a reference to the df1, df2, or df3. You can fix your problem by calling the eval() function on df_name. This will open your code up to injection attacks, but I'm assuming that is not an issue for you.

import pandas as pd

df1 = pd.DataFrame({"Name": ['A', 'B', 'C'], "Age": [1, 2, 3]})
df2 = pd.DataFrame({"Addr": ['D', 'E', 'F'], "PIN": [4, 5, 6]})
df3 = pd.DataFrame({"State": ['X', 'Y', 'Z'], "Phone": [7, 8, 9]})

def filter_df():
    df_name = eval(input("Enter Datframe"))
    column_name = input("Enter Column Name")
    if column_name in df_name.columns:
        print(df_name[column_name])
    else:
        print("Incorrct column Name")

filter_df(df2, 'Addr')

推荐阅读