Python Pandas - “一维”文件到二维数组

Posted

技术标签:

【中文标题】Python Pandas - “一维”文件到二维数组【英文标题】:Python Pandas - "1D" file to 2D array 【发布时间】:2015-07-23 15:15:38 【问题描述】:

我看到an answer to a question 将嵌套的“2D”字典转换为 Pandas DataFrame。那将是我的问题的解决方案,但后来我想知道,我是否可以跳过生成嵌套字典的中间步骤。假设我的输入 input.txt 如下所示:

A B 1
A C 2
B C 3

我可以使用 Pandas 或 Numpy 将其转换为以下对称矩阵,而无需生成中间嵌套字典吗?

  A B C
A 0 1 2
B 1 0 3
C 2 3 0

我想避免创建的嵌套字典是:

d = 'A':'B':1,'C':2,'B':'C':3

我在阅读"Reading an index with a MultiIndex" 上的 IO 工具文档后尝试了这个:

import pandas as pd
df = pd.read_csv('input.txt', sep=' ', index_col=[0,1], header=None)

但我没有得到 2D 热图,当我这样做时:

import matplotlib.pyplot as plt
plt.pcolor(df)
plt.imshow()

【问题讨论】:

您可以编辑或建议编辑 DSM 的答案,而不是在问题中解释接受的答案,将解释放在答案本身中 将立即执行此操作@tim-castelijns。谢谢你教我这个过程。 不用担心。它更适合问答形式 在哪里?编辑也不需要说EDIT: 【参考方案1】:

不确定这是否更有效,但您可以pivot 然后将帧添加到其转置中,例如:

df = pd.read_csv("input.txt", header=None, delim_whitespace=True)
df = df.pivot(0,1,2)
df.add(df.T, fill_value=0).fillna(0)

   A  B  C
A  0  1  2
B  1  0  3
C  2  3  0

这是addpivot 的文档。这是正在发生的事情。第一行df = pd.read_csv("input.txt", header=None, delim_whitespace=True) 返回:

   0  1  2
0  A  B  1
1  A  C  2
2  B  C  3

第二行df = df.pivot(0,1,2)然后返回:

1   B   C
0           
A   1   2
B NaN   3

012 的幻数是 indexcolumnsvaluesindex=0 是用于创建新框架索引的列名。 index 只是用于行名的熊猫行话。 columns=1 是用于制作新框架的列的列名。而values=2 只是用于生成新框架值的列名。

第三行df.add(df.T, fill_value=0).fillna(0)只是添加了转置,将三角矩阵转换为对称矩阵。它返回:

   A  B  C
A  0  1  2
B  1  0  3
C  2  3  0

【讨论】:

感谢您成为第一个向我展示的人,为什么我应该费心学习熊猫。很抱歉没有立即对您的答案进行投票,但我必须先阅读文档才能理解您答案中的 df.pivot(0,1,2) 部分。 它效率不高,但它只有 3 行代码,这对我来说是必不可少的,因为这是我在非洲为几乎没有编程经验的参与者所做的一门课程。超级感谢。谢谢。

以上是关于Python Pandas - “一维”文件到二维数组的主要内容,如果未能解决你的问题,请参考以下文章

将 Pandas 系列的二维 numpy 数组转换为一维 numpy 数组列的 Pandas DataFrame

Python | Python保存高维数组array,Python用pandas将numpy保存csv文件,Python保存3维数组

python数据分析学习pandas一维工具Series讲解

Python的pandas包的学习

pandas 一维台账数据与二维表格数据的转换

Pandas基础学习与Spark Python初探