使用 python 将 'repetitive' 二维数组转换为矩阵
Transforming a 'repetitive' 2D-array into a matrix using python
我有一个文本文件,其中包含以下形式的信息:
A 0
B 1
C 4
D 0
E 1
A 0
B 0
C 2
D 1
E 1
A 1
B 0
C 2
D 0
E 0
...
请注意,如果不计算 ABCDE 循环的总数(此处仅显示 3 个),则无法得知。
我想使用 Python 将其转换为具有以下形式的矩阵:
A 0 0 1 ...
B 1 0 0 ...
C 4 2 2 ...
D 0 1 0 ...
E 1 1 0 ...
我不确定进行此类转换的最佳方法是什么,有没有人作为 python 脚本执行此操作? Numpy 或 Pandas 中是否有任何功能可以轻松做到这一点?或者我应该在没有 Numpy 或 Pandas 的情况下这样做吗?
非常感谢您的帮助!
Pandas 解决方案:
import pandas as pd
from pandas.compat import StringIO
temp=u"""
A 0
B 1
C 4
D 0
E 1
A 0
B 0
C 2
D 1
E 1
A 1
B 0
C 2
D 0
E 0"""
#after testing replace StringIO(temp) to filename
df = pd.read_csv(StringIO(temp), sep="\s+", header=None)
print (df)
0 1
0 A 0
1 B 1
2 C 4
3 D 0
4 E 1
5 A 0
6 B 0
7 C 2
8 D 1
9 E 1
10 A 1
11 B 0
12 C 2
13 D 0
14 E 0
df = pd.pivot(index=df[0], columns=df.groupby(0).cumcount(), values=df[1])
print (df)
0 1 2
0
A 0 0 1
B 1 0 0
C 4 2 2
D 0 1 0
E 1 1 0
选项 1
添加索引级别和 unstack
s.index = [s.index, np.arange(len(s)) // 5]
s.unstack()
选项 2
重建
pd.DataFrame(s.values.reshape(5, -1), s.index[:5])
设置
我假设一个系列的第一列是索引。
import pandas as pd
from pandas.compat import StringIO
txt = """A 0
B 1
C 4
D 0
E 1
A 0
B 0
C 2
D 1
E 1
A 1
B 0
C 2
D 0
E 0"""
s = pd.read_csv(StringIO(txt), sep="\s+", header=None, index_col=0, squeeze=True)
我有一个文本文件,其中包含以下形式的信息:
A 0
B 1
C 4
D 0
E 1
A 0
B 0
C 2
D 1
E 1
A 1
B 0
C 2
D 0
E 0
...
请注意,如果不计算 ABCDE 循环的总数(此处仅显示 3 个),则无法得知。 我想使用 Python 将其转换为具有以下形式的矩阵:
A 0 0 1 ...
B 1 0 0 ...
C 4 2 2 ...
D 0 1 0 ...
E 1 1 0 ...
我不确定进行此类转换的最佳方法是什么,有没有人作为 python 脚本执行此操作? Numpy 或 Pandas 中是否有任何功能可以轻松做到这一点?或者我应该在没有 Numpy 或 Pandas 的情况下这样做吗?
非常感谢您的帮助!
Pandas 解决方案:
import pandas as pd
from pandas.compat import StringIO
temp=u"""
A 0
B 1
C 4
D 0
E 1
A 0
B 0
C 2
D 1
E 1
A 1
B 0
C 2
D 0
E 0"""
#after testing replace StringIO(temp) to filename
df = pd.read_csv(StringIO(temp), sep="\s+", header=None)
print (df)
0 1
0 A 0
1 B 1
2 C 4
3 D 0
4 E 1
5 A 0
6 B 0
7 C 2
8 D 1
9 E 1
10 A 1
11 B 0
12 C 2
13 D 0
14 E 0
df = pd.pivot(index=df[0], columns=df.groupby(0).cumcount(), values=df[1])
print (df)
0 1 2
0
A 0 0 1
B 1 0 0
C 4 2 2
D 0 1 0
E 1 1 0
选项 1
添加索引级别和 unstack
s.index = [s.index, np.arange(len(s)) // 5]
s.unstack()
选项 2
重建
pd.DataFrame(s.values.reshape(5, -1), s.index[:5])
设置
我假设一个系列的第一列是索引。
import pandas as pd
from pandas.compat import StringIO
txt = """A 0
B 1
C 4
D 0
E 1
A 0
B 0
C 2
D 1
E 1
A 1
B 0
C 2
D 0
E 0"""
s = pd.read_csv(StringIO(txt), sep="\s+", header=None, index_col=0, squeeze=True)