我有一个由90组载体数据组成的txt文件,它们由一个新行分隔。每个载体数据由200个复数组成,由制表符分隔。
我想要的只是一个90 * 200的数组,每个数字都是复数的幅度。如何读取文件并进行转换?python将非正式复杂数字文件转换为正式幅度数据
0
A
回答
0
你的意思是?
result = []
file = open('yourfile.txt')
for line in file.readlines():
result.append(line.split())
file.close()
print(result)
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()
然后删除所有行,其中0在第一列通过dropna
:
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
通过索引并转换为numpy的阵列由values
:
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]]
相关问题
- 1. 将Perl正则表达式转换为Python正则表达式
- 2. Python:将格式字符串转换为正则表达式
- 3. R将复杂的XML文件转换为数据框
- 4. Python 3.6将NetCDF文件数据转换为不同的格式
- 5. 尝试将数据长格式转换为宽幅
- 6. 为什么将视频文件转换为FLV非常复杂?
- 7. CSV将文件行数据转换为字典输入格式
- 8. 将##转换为数字正则表达式
- 9. 将字符串转换为复数python
- 10. python:将字符串转换为正则表达式
- 11. 将“非正式”月份日指数转换为日期时间指数
- 12. 以编程方式将复杂的Excel文件转换为HTML格式
- 13. Python的正则表达式特定的模式转换文件
- 14. 如何将python正则表达式转换为java正则表达式?
- 15. 将C#正则表达式转换为JavaScript正则表达式
- 16. 将Perl正则表达式转换为SQL正则表达式
- 17. 如何将NSArray(以字符串格式)转换为真正的数组格式?
- 18. 将字典转换为数据框python
- 19. 我如何使用python将复杂.mat文件转换为csv
- 20. 将URL转换为正则表达式
- 21. 将Coldfusion Error.DateTime转换为正常格式?
- 22. 将EBNF转换为正则表达式
- 23. 将正则表达式转换为CFG
- 24. 如何将C++数字格式转换为C#数字格式?
- 25. 将InputStream.read()转换为数字(非整数)
- 26. 将货币格式转换为数字
- 27. 将数据转换为angular2格式
- 28. PHP将数字转换为非标准格式
- 29. 将文本格式转换为数字格式
- 30. 基数转换的计算复杂度
此外,如果这不是你的意思,它会帮助你使用分裂()和readlines方法() – YpsilonZett