Python将x、y和z的列表转换为矩阵/表格

Python将x、y和z的列表转换为矩阵/表格,python,python-2.7,matrix,export-to-csv,Python,Python 2.7,Matrix,Export To Csv,我有一份格式清单: [[x_0, y_0, z_0], [x_1, y_1, z_1] ... [x_n, y_n, z_n]] 其中可以是x_0==x_1: [[0, 0, z_0], [0, 1, z_1], [0, 2, z_2]... [1, 0, z_o] ... [x_n, y_n, z_n]] 我想像这样将其转换为矩阵(最好创建csv文件): 主要问题-我不知道数组的总大小(每次都会更改,但始终是正方形)。 进行这种类型的转换最简单的方法是什么 该列表是点的XYZ坐标。使用熊

我有一份格式清单:

[[x_0, y_0, z_0], [x_1, y_1, z_1] ... [x_n, y_n, z_n]]
其中可以是x_0==x_1:

[[0, 0, z_0], [0, 1, z_1], [0, 2, z_2]... [1, 0, z_o] ... [x_n, y_n, z_n]]
我想像这样将其转换为矩阵(最好创建csv文件):

主要问题-我不知道数组的总大小(每次都会更改,但始终是正方形)。 进行这种类型的转换最简单的方法是什么


该列表是点的XYZ坐标。

使用熊猫创建透视表。透视表允许您以行格式获取数据,并将其重新排列为行、列和值

import pandas as pd
import random

# create some fake data

data = [(i,j,0.1*random.randrange(1,50,1)) for i in range(5) for j in range(5)]

# [(0, 0, 4.2), (0, 1, 1.9), (0, 2, 1.2), (0, 3, 1.2), (0, 4, 1.6),
#  (1, 0, 2.0), (1, 1, 0.9), (1, 2, 3.5), (1, 3, 3.0), (1, 4, 0.8),
#  (2, 0, 4.9), (2, 1, 2.8), (2, 2, 1.8), (2, 3, 2.7), (2, 4, 0.2),
#  (3, 0, 3.0), (3, 1, 1.8), (3, 2, 0.3,  (3, 3, 3.3), (3, 4, 4.4),
#  (4, 0, 1.9), (4, 1, 4.5), (4, 2, 3.6), (4, 3, 0.4), (4, 4, 0.4)]

# read it into a dataframe:
df = pd.DataFrame(data, columns=['x','y','z'])

# create pivot table with x and rows, y and columns, z as values
df.pivot_table(values='z', index='x', columns='y')

# y    0    1    2    3    4
# x
# 0  4.2  1.9  1.2  1.2  1.6
# 1  2.0  0.9  3.5  3.0  0.8
# 2  4.9  2.8  1.8  2.7  0.2
# 3  3.0  1.8  0.3  3.3  4.4
# 4  1.9  4.5  3.6  0.4  0.4
使用熊猫和裸体

import pandas as pd
import numpy as np
import math

lis = [[0,0,3.4],[0,1,5.6],[1,0,4.3],[1,1,3.4]]

n2 = len(lis)
n = int(math.sqrt(n2))

nparray = np.zeros([n,n])

for l in lis:
    nparray[[l[0],l[1]]]=l[2]

print nparray
#[[ 4.3  4.3]
# [ 3.4  3.4]]

#Output to csv
df = pd.DataFrame(nparray)
df.to_csv('/some/path')

如果您想坚持使用标准库,这是一种方法。用您的数据创建一个字典,然后使用字典键将内容排序为CSV格式;最后写入CSV文件:

# Data = your data formatted as described
resultsdict = {}
csvfile = ""
counter = 0

# create tuple-paired key dictionary of values (i.e. (0,0): 1.2, etc)
for pairs in data:
    if pairs[0] > counter:
        # track the square size
        counter = pairs[0]
    currentpairkey = (pairs[0], pairs[1])
    resultsdict[currentpairkey] = pairs[2]

# create raw CSV data
count = range(counter + 1)
for x in count:
    row = []
    for y in count:
        currentpairkey = (x, y)
        # this line is where you control your desired formatting.
        row.append("%s" % (resultsdict[currentpairkey]))
    print(row)
    csvfile += "%s\n" % ",".join(row)

# write CSV file
with open("results.csv", "w") as f:
    f.write(csvfile)

你能更详细地解释一下一个3×N大小的列表是如何变成17×17矩阵的吗?特别是因为17不能平均地除以3。什么输入值对应什么输出值?@Kevin for n=16这将起作用。怎么了?哦,我明白了。X和Y值是结果矩阵的整数索引。我以为他想把[[a,b,c],[d,e,f],[g,h,I]]组合成一个3x3的正方形,
a
I
是单元格值。那么x和y是坐标,z是值?您只是想将数据转储到csv文件,还是需要使用新格式的数据?@SurestTexas仅转储到csv文件这也是可行的代码,但另一个有点简单它几乎可以工作,但它不会创建实体表(例如12x12,而是12x5,而不是另一个12x5和12x2…)如何创建实体表12x12?