【发布时间】:2016-09-02 16:42:42
【问题描述】:
这是为元组创建 DataFrame 的正确方法吗? (假设元组是在代码片段中创建的)
import pandas as pd
import numpy as np
import random
row = ['a','b','c']
col = ['A','B','C','D']
# use numpy for creating a ZEROS matrix
st = np.zeros((len(row),len(col)))
df2 = pd.DataFrame(st, index=row, columns=col)
# CONVERT each cell to an OBJECT for inserting tuples
for c in col:
df2[c] = df2[c].astype(object)
print df2
for i in row:
for j in col:
df2.set_value(i, j, (i+j, np.round(random.uniform(0, 1), 4)))
print df2
如您所见,我首先在 numpy 中创建了一个 zeros(3,4),然后在 Pandas 中将每个单元格设为 OBJECT 类型,这样我就可以插入元组。这是正确的做法还是有更好的解决方案将元组添加/检索到矩阵?
结果很好:
A B C D
a 0 0 0 0
b 0 0 0 0
c 0 0 0 0
A B C D
a (aA, 0.7134) (aB, 0.006) (aC, 0.1948) (aD, 0.2158)
b (bA, 0.2937) (bB, 0.8083) (bC, 0.3597) (bD, 0.324)
c (cA, 0.9534) (cB, 0.9666) (cC, 0.7489) (cD, 0.8599)
【问题讨论】:
-
DataFrame 的设计目的是在每个单元格中存储一个标量值。为什么要存储元组?
-
我正在设计一个 HMM/Viterbi 类,所以我必须存储概率和创建该概率的先前状态,以便稍后我可以检索最佳反向路径。
-
为什么不将这些存储在单独的列中?
-
您能否详细说明您的问题?例如,我如何根据您的想法在 b-C 的横截面检索内容? {现在我可以设置/获取 ('bC', 0.36) }
-
元组中的第一个值是否总是“等于”单元格的行索引加上列索引?
标签: python numpy pandas tuples