我有一个大的输入文本文件(>;10000行),您可以在下面找到其中的摘录:
$
SPC 10 507901 123456 0.0
SPC 10 507902 123456 0.0
SPC 10 507903 123456 0.0
$
GRID 100001 100000 8.17119-0.68585 1.92194 100010
GRID 100002 100000 7.73198-0.94529 1.73439 100010
GRID 100003 100000 7.28772-0.97244 1.54514 100010
GRID 100004 100000 6.76982-0.71715 1.32471 100010
我试图提取所有从网格开始的行,并将它们放在一个由7列组成的数据框架中。每列由8个字符定义(感谢Nastran)。例如,对于上面显示的第一条网格线,应将其划分为:
|GRID | 100001| 100000| 8.17119|-0.68585| 1.92194| 100010|
我的代码:
model_without_grid = list()
model_just_grid = list()
with open('MODELE1', encoding='utf-8') as in_file:
for line in in_file:
if line.startswith('GRID') :
model_just_grid.append(line)
else :
model_without_grid.append(line)
给我一个很好的列表,列出了所有以网格开头的行。 现在我想使用split函数将每一行划分为一个数据帧的多个列
通过使用此问题: Convert a tab- and newline-delimited string to pandas dataframe
我试过:
grid_pd = pd.DataFrame([x.split(' ') for x in model_just_grid],columns=list('1234567'))
但会出现以下错误:
ValueError: 7 columns passed, passed data had 1 columns
当然,如果我去掉columns部分,我会得到一个数据框,其中一列与我的列表完全相同
然后我试着:
aaa = grid_pd[0].str.split('.{8}')
及
aaa = grid_pd[0].str.extractall('(.{8})')
但是第一个创建一个空数据帧,第二个创建一个多索引数据帧。通过解开它
aaa = aaa.unstack()
它确实给了我数据帧,但必须有一个更干净的解决方案
有人知道如何解决我的问题吗?操作似乎很简单,但我想不出一个干净的方法来继续
提前感谢您的帮助
在创建数据帧之前,您希望将每行拆分为7个大小相等的段。这可以通过在所有相关字符串上循环并根据条件拆分它们来实现
例如:
结果:
相关问题 更多 >
编程相关推荐