python - 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'
请告诉我如何实现这一目标?
解决方案
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')
推荐阅读
- javascript - Rest API不通过android触发JavaScript但在浏览器中工作
- java - 在异步节俭客户端中传递 URI/上下文路径
- rest - 为现有 Grpc 设计创建外部 RESTful API 的原因
- javascript - 将 FileReader 的结果编码改为 UTF8
- asp.net - 错误:语言环境。我该如何解决这个错误?
- javascript - 突出显示输入文本区域内的单词
- html - 在 div 内定位固定 div 不起作用
- sql - 处理 JOINS for PostgreSQL 的 SQL 语句
- java - 跨越聚合树的限定符
- java - 调用多个 Web 服务并读取第一个响应的最佳方法