Python 如何在没有循环的情况下以csv格式保存二维关联数组?

Python 如何在没有循环的情况下以csv格式保存二维关联数组?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个二维关联数组,如下所示: import numpy as np import pandas as pd stateList = ['0_0_0', '0_0_1', '0_0_2', '0_0_3'] toState = { state : 0 for state in stateList} transitionCounter = { state : toState.copy() for state in stateList} transitionCounter

我有一个二维关联数组,如下所示:

import numpy as np
import pandas as pd

stateList = ['0_0_0', '0_0_1', '0_0_2', '0_0_3']
toState          = { state : 0  for state in stateList}
transitionCounter = { state : toState.copy()  for state in stateList}

transitionCounter['0_0_0']['0_0_2'] = 1
transitionCounter['0_0_0']['0_0_0'] = 10
transitionCounter['0_0_3']['0_0_2'] = 4

transitionCounter['0_0_1']['0_0_2'] = 5
transitionCounter['0_0_3']['0_0_1'] = 7

print(transitionCounter)
但是,现在我想把它保存在.csv文件中。所以,它的最终格式应该是这样的:

我尝试了以下代码:

stateColumn = ['0_0_0', '0_0_1', '0_0_2', '0_0_3']
dt = pd.DataFrame(columns=stateColumn)
dt["States"] = ['0_0_0', '0_0_1', '0_0_2', '0_0_3']

print(dt)

for fromState in stateList:
    for toState in stateList:
        dt[dt["States"] == fromState,toState] = transitionCounter[fromState][toState]
但它抱怨以下错误:

TypeError:“Series”对象是可变的,因此不能对它们进行散列

您可以使用
csv.writer(…)
将数组写入
.csv
文件

例如:

。。。
导入csv
...
打开(“new_file.csv”、“w+”)作为文件:
csvWriter=csv.writer(文件,分隔符=',')
csvWriter.writerows(transitionCounter)

您可以使用
csv.writer(…)
将数组写入
.csv
文件

例如:

。。。
导入csv
...
打开(“new_file.csv”、“w+”)作为文件:
csvWriter=csv.writer(文件,分隔符=',')
csvWriter.writerows(transitionCounter)

要从字典创建
数据帧
,您只需使用:

dt = pd.DataFrame(transitionCounter).T
结果:

       0_0_0  0_0_1  0_0_2  0_0_3
0_0_0     10      0      1      0
0_0_1      0      0      5      0
0_0_2      0      0      0      0
0_0_3      0      7      4      0
要将数据集保存为csv文件,可以使用以下功能:

要修复
for
循环中的错误,需要添加属性
loc

for fromState in stateList:
    for toState in stateList:
        dt.loc[dt["States"] == fromState,toState] = transitionCounter[fromState][toState]

要从字典创建
数据帧
,您只需使用:

dt = pd.DataFrame(transitionCounter).T
结果:

       0_0_0  0_0_1  0_0_2  0_0_3
0_0_0     10      0      1      0
0_0_1      0      0      5      0
0_0_2      0      0      0      0
0_0_3      0      7      4      0
要将数据集保存为csv文件,可以使用以下功能:

要修复
for
循环中的错误,需要添加属性
loc

for fromState in stateList:
    for toState in stateList:
        dt.loc[dt["States"] == fromState,toState] = transitionCounter[fromState][toState]

不幸的是,输出不是真的不幸的是,输出不是真的。它给了我一个
.csv
文件,但里面的数字不准确。对吗?@Jeff我没听清这个问题。我想您需要添加一个文件名。当我按照您的解决方案进行操作时,条目中的数字是错误的。例如
dt[“0_0_2”,“0_0_0”]
必须为
null
,同时您的解决方案给出了
1
,这是错误的。请找到我添加到问题中的图像。这是所需的输出。@Ok。我懂了。您需要转置数据帧。请参阅我编辑的答案。需要在末尾添加
.T
。它给了我一个
.csv
文件,但里面的数字不准确。对吗?@Jeff我没听清这个问题。我想您需要添加一个文件名。当我按照您的解决方案进行操作时,条目中的数字是错误的。例如
dt[“0_0_2”,“0_0_0”]
必须为
null
,同时您的解决方案给出了
1
,这是错误的。请找到我添加到问题中的图像。这是所需的输出。@Ok。我懂了。您需要转置数据帧。请参阅我编辑的答案。需要在末尾添加
.T