pandas 如何将单个列值与括号之间的其他数据拆分为多列DataFrame?

rdlzhqv9  于 2023-10-14  发布在  其他
关注(0)|答案(1)|浏览(100)

我最近决定再次使用Python(在7年多之后),但我目前正在努力实现使用MATLAB(我大部分时间使用的编程语言)在几秒钟内完成的事情。我的目标是查询MS Access DB并保存结果,以便以后对数据进行排序、筛选和操作。
我已经成功地查询了数据库(使用pyodbc),并将查询输出存储在变量“db_out”中。我已经确认查询返回了48个结果,由13列组成,类型是列表。

print(len(db_out)) --> 48
print(len(db_out[0])) --> 13
print(type(db_out)) --> <class 'list'>

在Pandas Library的帮助下,我继续将列表转换为DataFrame。

my_data_frame = df = pd.DataFrame(db_out)
print(my_data_frame)

但似乎列分隔没有通过DataFrame传递,因为我得到了这个(当我打印变量时):

0

0   [1, Name1, N, CAN, None, C, None, KDI1...
1   [1, Name2, N, CAN, None, C, None, KDI1...
.
.
.
47   [1, Name48, N, CAN, None, C, None, KDI1...

好了,我得到了48行(从0到47,但为什么只有一列?它是否认为整个事情是一个单一的字符串?)
如何让DataFrame变成这样(参见下面的2D-Array):

0              1  2    3     4  5   ...    7  8     9       10       11       12
0   1  Name1  N  CAN  None  C  ...  KDI1  1  None  100000  17700.0  20200.0
1   1  Name2  N  CAN  None  C  ...  KDI1  2  None  100000  17700.0  20200.0
.
.
.
47   1  Name1  N  CAN  None  C  ...  KDI1  2  None  100000  17700.0  20200.0

我已经尝试了很多东西(以我有限的Python知识),但不知道如何完成这一任务。
真正让我困惑的是,我可以打印“db_out”并得到这个:

[(1, 'Name1', 'N', 'CAN', None, 'C', None, 'KDI1', 1, None, 100000, 17700.0, 20200.0), (1, 'Name2', 'N', 'CAN', None, 'C', None, 'KDI1', 1, None, 100000, 17700.0, 20200.0), . . . Until the 48th query output.

通过直接复制上面打印的结果并将其保存在一个变量中,可以使DataFrame具有我需要的结构。
在Stackoverflow的一些自动化建议之后,我尝试了以下方法:

columns = ['col1','col2',...'col13']
my_new_data_frame=pd.DataFrame(db_out,columns=columns)

但我得到了这个错误:
ValueError:传递值的形状为(48,1),索引暗示(48,13)

1yjd4xko

1yjd4xko1#

看来我找到了一种方法来获得所需的输出结构。在保存查询结果时(使用pyodbc),我正在迭代查询:

query_result = []
    for x in cur.fetchall():
        query_result.append(x)

我直接用www.example.com _sql_query替换了上面创建DataFrame的迭代pd.read,得到了我所期望的结构!!

相关问题