繁体   English   中英

pandas dataframe 传递值的形状为 (5, 1),索引表示 (5, 2)

[英]pandas dataframe Shape of passed values is (5, 1), indices imply (5, 2)

我看到几个类似的问题,但他们没有解决我的问题。

简短版本:如果我创建一个元组列表以用作 dataframe 的输入,则一切都按预期工作。 如果元组列表是 SQL 查询的结果,我会收到主题名称中提到的错误。 这两个元组列表看起来与我相同(我通过从第二个列表复制创建了第一个列表,因此它们应该相同),但与 pandas 不同。 任何帮助将不胜感激。

长版:如果我这样做:

query_results = [('Pick_Task', 'task_internal_id'), ('Pick_Task', 'task_id'), ('Pick_Task', 'date_created'),
        ('Pick_Task', 'plan'), ('Pick_Task', 'employee_actual')]

df = pd.DataFrame(query_results, columns=['Table Name','Column Name'])
print(df)

我明白了(这是我所期望的):

Table Name       Column Name
0  Pick_Task  task_internal_id
1  Pick_Task           task_id
2  Pick_Task      date_created
3  Pick_Task              plan
4  Pick_Task   employee_actual

如果我这样做:

query = """SELECT TABLE_NAME, COLUMN_NAME
        FROM Analyst.INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = 'Pick_Task'
        """
with conn.cursor() as cursor:
    cursor.execute(query)
    query_results = cursor.fetchall()

print(query_results)
    
df = pd.DataFrame(query_results, columns = ['Table Name', 'Column Name'])

我明白了(这是我所期望的):

[('Pick_Task', 'task_internal_id'), ('Pick_Task', 'task_id'), ('Pick_Task', 'date_created'), ('Pick_Task', 'plan'), ('Pick_Task', 'employee_actual')]

但我也得到了这个(这不是我所期望的,也是我在这里寻求帮助的原因):

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_3200/749747456.py in <module>
      9 print(query_results)
     10 
---> 11 df = pd.DataFrame(query_results, columns = ['Table Name', 'Column Name'])

~\Miniconda3\envs\da1\lib\site-packages\pandas\core\frame.py in __init__(self, data, index, columns, dtype, copy)
    709                     )
    710                 else:
--> 711                     mgr = ndarray_to_mgr(
    712                         data,
    713                         index,

~\Miniconda3\envs\da1\lib\site-packages\pandas\core\internals\construction.py in ndarray_to_mgr(values, index, columns, dtype, copy, typ)
    322     )
    323 
--> 324     _check_values_indices_shape_match(values, index, columns)
    325 
    326     if typ == "array":

~\Miniconda3\envs\da1\lib\site-packages\pandas\core\internals\construction.py in _check_values_indices_shape_match(values, index, columns)
    391         passed = values.shape
    392         implied = (len(index), len(columns))
--> 393         raise ValueError(f"Shape of passed values is {passed}, indices imply {implied}")
    394 
    395 

ValueError: Shape of passed values is (5, 1), indices imply (5, 2)

遇到类似问题,尝试从列表中创建 DataFrame:

dt = ['a','b','c']
df = pd.DataFrame(data=dt, columns=['1','2','3'])

通过将 'data' 参数作为列表列表传递来解决:

df = pd.DataFrame(data=[dt], columns=['1','2','3'])

所以你应该尝试:

df = pd.DataFrame([query_results], columns = ['Table Name', 'Column Name'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM