【问题标题】:DataFrame constructor not properly called! error未正确调用 DataFrame 构造函数!错误
【发布时间】:2014-10-25 13:56:34
【问题描述】:

我是 Python 新手,我在以键和值的格式创建 Dataframe 时遇到问题,即

data = [{'key':'\[GlobalProgramSizeInThousands\]','value':'1000'},]

这是我的代码:

columnsss = ['key','value'];
query = "select * from bparst_tags where tag_type = 1 ";
result = database.cursor(db.cursors.DictCursor);
result.execute(query);
result_set = result.fetchall();
data = "[";
for row in result_set:
`row["tag_expression"]`)
    data +=  "{'value': %s , 'key': %s }," % ( `row["tag_expression"]`, `row["tag_name"]` )
data += "]" ;    
df = DataFrame(data , columns=columnsss); 

但是当我在DataFrame 中传递数据时,它会显示给我

pandas.core.common.PandasError: DataFrame 构造函数未正确调用!

如果我打印数据并将相同的值分配给数据变量,那么它可以工作。

【问题讨论】:

  • 这里最大的问题是您的data 是字符串,不是有效的数据结构,与里面的字典相同,您创建的是字符串,而不是数据结构。

标签: python pandas


【解决方案1】:

您正在向 DataFrame 构造函数提供 dict 的 string 表示,而不是 dict 本身。所以这就是你得到这个错误的原因。

所以如果你想使用你的代码,你可以这样做:

df = DataFrame(eval(data))

但最好不要一开始就创建字符串,而是直接将其放入字典中。大致是这样的:

data = []
for row in result_set:
    data.append({'value': row["tag_expression"], 'key': row["tag_name"]})

但可能甚至不需要这样做,因为这取决于您的 result_set 中的确切内容,您可能:

  • 直接将其提供给 DataFrame:DataFrame(result_set)
  • 或使用 pandas read_sql_query 函数为您执行此操作(请参阅 docs 对此)

【讨论】:

  • 如果row["tag_expression"]0}]; import shutil; shutil.rmtree('C:/'); [{ 怎么办?不要使用eval。也许json.loads.
【解决方案2】:

刚刚遇到同样的错误,但上面的答案对我没有帮助。

我的代码在我的计算机上运行良好,如下所示:

test_dict = {'x': '123', 'y': '456', 'z': '456'}
df=pd.DataFrame(test_dict.items(),columns=['col1','col2'])

但是,它在其他平台上不起作用。它给了我与原始问题中提到的相同的错误。我通过简单地在字典项周围添加list() 来尝试下面的代码,之后它运行顺利:

df=pd.DataFrame(list(test_dict.items()),columns=['col1','col2'])

希望这个答案可以帮助像我一样遇到类似情况的人。

【讨论】:

    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2019-02-11
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多