我有一个由90组运营商数据组成的txt文件,这些数据由一个新行分隔。每个载体数据由200个复数组成,由选项卡分隔 我想要的只是一个90 * 200的数组,每个都是复数的幅度。我怎样才能读取文件并进行转换?
答案 0 :(得分:0)
你的意思是?
result = []
file = open('yourfile.txt')
for line in file.readlines():
result.append(line.split())
file.close()
print(result)
答案 1 :(得分:0)
您可以使用read_csv
参数skip_blank_lines
来获取群组:
import pandas as pd
import numpy as np
from pandas.compat import StringIO
temp=u"""
7+3j;2+1j
1+6j;5+1j
8+3j;1+7j
5+4j;4+1j
6+2j;2+1j
8+4j;9+3j
"""
#after testing replace StringIO(temp) to filename
df = pd.read_csv(StringIO(temp),
sep=";", #in real data use sep='\t'
skip_blank_lines=False,
names=np.arange(2)) #in real data use 200
print (df)
0 1
0 NaN NaN
1 7+3j 2+1j
2 1+6j 5+1j
3 NaN NaN
4 8+3j 1+7j
5 5+4j 4+1j
6 NaN NaN
7 6+2j 2+1j
8 8+4j 9+3j
通过iloc
选择第一列创建索引,按isnull
获取掩码,然后应用cumsum
- 在index
中创建具有相同值的组:
df.index = df.iloc[:, 0].isnull().cumsum()
然后按dropna
删除第一列中NaN
的所有行:
df = df.dropna(subset=[0])
转换为complex并按numpy.angle
获得幅度:
df = df.applymap(lambda x: np.angle(np.complex(x)))
print (df)
0 1
0
1 0.404892 0.463648
1 1.405648 0.197396
2 0.358771 1.428899
2 0.674741 0.244979
3 0.321751 0.463648
3 0.463648 0.321751
按索引提交groupby
并按values
转换为numpy数组:
print (df.groupby(level=0).apply(lambda x: x.values).values)
[array([[ 0.40489179, 0.46364761],
[ 1.40564765, 0.19739556]])
array([[ 0.35877067, 1.42889927],
[ 0.67474094, 0.24497866]])
array([[ 0.32175055, 0.46364761],
[ 0.46364761, 0.32175055]])]
如果不需要群组,请使用:
import pandas as pd
import numpy as np
from pandas.compat import StringIO
temp=u"""
7+3j;2+1j
1+6j;5+1j
8+3j;1+7j
5+4j;4+1j
6+2j;2+1j
8+4j;9+3j
"""
#after testing replace StringIO(temp) to filename
df = pd.read_csv(StringIO(temp),
sep=";", #in real data use sep='\t'
names=np.arange(2)) #in real data use 200
print (df)
0 1
0 7+3j 2+1j
1 1+6j 5+1j
2 8+3j 1+7j
3 5+4j 4+1j
4 6+2j 2+1j
5 8+4j 9+3j
df = df.applymap(lambda x: np.angle(np.complex(x)))
print (df)
0 1
0 0.404892 0.463648
1 1.405648 0.197396
2 0.358771 1.428899
3 0.674741 0.244979
4 0.321751 0.463648
5 0.463648 0.321751
print (df.values)
[[ 0.40489179 0.46364761]
[ 1.40564765 0.19739556]
[ 0.35877067 1.42889927]
[ 0.67474094 0.24497866]
[ 0.32175055 0.46364761]
[ 0.46364761 0.32175055]]