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
。