2017-08-23 50 views
2

这是我的情况:我从Matlab(X,Y,Z)的大小为(126,321)的3个矩阵X是x坐标,Y y坐标,Z是机器的效率取决于坐标X和Y. 我想在python中使用矩阵Z.所以我将Z保存在一个文本文件中。但是在将它转置并旋转90°之前(因为Matlab中的矩阵与图中的矩阵并不相同)。 然后我在文本文件中用x坐标保存了矢量 然后我用y坐标将矢量保存在文本文件中。用3个文本文件创建熊猫数据框

所以我有3个文本文件: - text1.txt与尺寸(126321)(它是Z) - text2.txt其与126倍的值 一个线 - text3.txt其与321倍的值的线

我想要做的就是创建一个带有text1数据,文本2索引,text3头部的熊猫数据框。

我做了下面的代码:

Efficiency=pd.read_csv('text1.txt',sep=';',header=None,index_col=False) 
x=pd.read_csv('text3.txt',sep=';',header=None,index_col=False) 
y=pd.read_csv('text2.txt',sep=';',header=None,index_col=False) 
Efficiency.columns=x 
Efficiency.index=y 

但最后两行不工作。 我试图通过numpy,但结果也不好。

所以,如果你有任何解释或解决方案告诉我!

非常感谢。

+0

考查大熊猫concat函数的https://大熊猫.pydata.org/pandas-docs/stable/generated/pandas.concat.html –

回答

0
df1=pd.DataFrame(np.random.randint(0,100,126)) 

df2=pd.DataFrame(np.random.randint(322,1000,321))#The problem is that at least two columnn names are equal and thus it throws an error 

您可以使用它调查重复值。这应该以同样的方式为您

duplicates=df2.duplicated() 
print(df2[duplicates]) 

    0 
22 828 
30 575 
41 341 
55 713 
75 341 
80 353 
92 759 
117 520 
118 330 
126 828 
130 547 
134 927 
142 451 
150 778 
155 417 

....

Bacause下探值以及改变值是不是对你的选择一个方便的方法是使用多指标,其中的x值是在第一级和第二级是数字从0到你的列数。

mcols=pd.MultiIndex.from_arrays([np.random.randint(322,1000,321),np.linspace(0,320,321)]) 

df3=pd.DataFrame(np.random.randint(0,100,size=(126,321)))# This ranom numbers should simulate your (126,321) DataFrame 


df4=pd.DataFrame(df3.values,index=df1,columns=mcols) 
print(df4) 

.....

868 679 757 464 420 381 843 549 978 450 ... 578 \ 
    0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 ... 311.0 
47  7 73 78 98 41 62 48 65 35 26 ...  85 
68 54 40 61 75 24  9 15 25  1 35 ...  63 
89 44 30 48 95 27 11 52 41 87 31 ...  73 
57 61 46 11 88 21 58 80 42 99 65 ...  23 
37 70 88 32 95 46 66 93 37 88 95 ...  64 
38 14 19 63 73  0 53 71  4 20 63 ...  88 
60 71 87 18 30 94 30 32  9 32 82 ...  36 
15 87  8 57 68 24 95 26 47 29 29 ...  5 
77 70 54 82 31 85 27 13 13 66 16 ...  3 
10  1 28 64  2 75 22 20  9 93  0 ...  89 
60 26 62 81 13  8 18 40 15 13 47 ...  44 
35 24 42 16 68 45 73 96 81  3 44 ...  16 
81 63 30 19 81 99 81  9  9 34 37 ...  53 

.....

参考Shihe Zhang您可以直接设置索引和列名不重建索引,并没有多指数使用:

df4=pd.DataFrame(df3.values,index=df1.iloc[:,0],columns=df2.iloc[:,0]) 
+0

只需使用pd创建df1,df2和df3。read_csv() – 2Obe

+0

我这样做了,但我收到消息错误: 缓冲区的维数不正确(expected1,got2) – Nathan

+0

我在末尾使用了以下代码: 'df4 = pd.DataFrame(df3,index = df1.loc [:,0],columns = df2.loc [:,0])',它工作。谢谢 ! – Nathan

1

你需要的是使x的一行和y的一行成为指数。 要更改索引,请使用reindex

Efficiency.reindex(index=x.iloc[0], columns=y.iloc[0]) 

注:

产生一个新的对象,除非新的索引相当于 当前和复制=假

相关问题