我需要创建一个Pandas 数据帧基于4个txt文件与 comments (阅读时跳过)基于以下 struct :

# Moteur conçu par le Poly Propulsion Lab (PPL)
nom=Tondeuse

# Propriétés générales
hauteur=0.5
masse=20.0
prix=110.00

# Propriétés du moteur
impulsion specifique=80

# Moteur conçu par le Poly Propulsion Lab (PPL)
nom=Civic VTEC

# Propriétés générales
hauteur=2.0
masse=3000.0
prix=2968.00

# Propriétés du moteur
impulsion specifique=205

# Moteur conçu par le Poly Propulsion Lab (PPL)
nom=VelociRAPTOR

# Propriétés générales
hauteur=4.0
masse=2000.0
prix=6000.00

# Propriétés du moteur
impulsion specifique=250

# Moteur conçu par le Poly Propulsion Lab (PPL)
nom=La Puissance

# Propriétés générales
hauteur=12.0
masse=15000.0
prix=39000.00

# Propriétés du moteur
impulsion specifique=295

这就是我需要的结果:

            nom  hauteur    masse     prix  impulsion specifique
0      Tondeuse      0.5     20.0    110.0                    80
1    Civic VTEC      2.0   3000.0   2968.0                   205
2  VelociRAPTOR      4.0   2000.0   6000.0                   250
3  La Puissance     12.0  15000.0  39000.0                   295

我不知道这是否可能,但这就是我被要求做的

推荐答案

欢迎来到Stackoverflow!:)

如果您的txt文件像您刚才显示的那样具有其内容,您可以使用Pandas作为CSV文件来读取它们.

pandas.read_csv函数有多个功能将在这里帮助您:

  • 它输出一个数据帧,这是您最终想要的格式
  • 具有comment个输入参数,您可以使用该参数定义要忽略的行
  • 您可以使用=号作为分隔符,这将使您能够将数据拆分到需要的部分

现在,让我们try 使用read_csv函数读取您的一个文件:

import pandas as pd
df = pd.read_csv(file, comment='#', sep='=', header=None)
df
                    nom  Tondeuse                                                                                                                                                                                                                                               
0               hauteur       0.5                                                                                                                                                                                                                                               
1                 masse      20.0                                                                                                                                                                                                                                               
2                  prix     110.0                                                                                                                                                                                                                                               
3  impulsion specifique      80.0

我们还没有完全做到这一点.我们希望删除不提供任何信息的索引列,并希望转置数据帧(行和列)以便能够将所有数据帧连接在一起.那,我们做吧!

import pandas as pd
df = pd.read_csv(file, comment='#', sep='=', header=None, index_col=0).T
df

0       nom hauteur masse    prix impulsion specifique                                                                                                                                                                                                                          
1  Tondeuse     0.5  20.0  110.00                   80

看起来好多了!放入index_col=0会使最左边的列成为索引列,而最后的.T将调换您的数据帧.现在我们只需要将其放入一个循环中,并从中生成一个完整的脚本!

import pandas as pd
import glob
import os

files = glob.glob(os.path.join(path, '*.csv'))

all_dfs = []
for file in files:
    current_df = pd.read_csv(file, comment='#', sep='=', header=None, index_col=0).T
    all_dfs.append(current_df)

total_df = pd.concat(all_dfs)
total_df

0           nom hauteur    masse      prix impulsion specifique                                                                                                                                                                                                                 
1  La Puissance    12.0  15000.0  39000.00                  295                                                                                                                                                                                                                 
1    Civic VTEC     2.0   3000.0   2968.00                  205                                                                                                                                                                                                                 
1  VelociRAPTOR     4.0   2000.0   6000.00                  250                                                                                                                                                                                                                 
1      Tondeuse     0.5     20.0    110.00                   80

请注意,您仍然有最后一列的索引号,我没有清除它,因为我不确定您想要在那里做什么.

此外,重要的是,您需要意识到,如果您的文件中的列名略有不同(例如,impulsion specifiqueimpulsion spécifique),这将带来错误.您将需要为这些创建错误处理过程.或者可能强制执行某个模式,但这超出了这个问题的范围.

我希望这能帮到你!

Python相关问答推荐

当多个值具有相同模式时返回空

仿制药的类型铸造

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

scikit-learn导入无法导入名称METRIC_MAPPING64'

如何制作10,000年及以后的日期时间对象?

如何并行化/加速并行numba代码?

无法连接到Keycloat服务器

如何禁用FastAPI应用程序的Swagger UI autodoc中的application/json?

如何使用使用来自其他列的值的公式更新一个rabrame列?

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

查看pandas字符列是否在字符串列中

如何从比较函数生成ngroup?

在我融化极点数据帧之后,我如何在不添加索引的情况下将其旋转回其原始形式?

如何在Python中解析特定的文本,这些文本包含了同一行中的所有内容,

正在try 让Python读取特定的CSV文件

通过对列的其余部分进行采样,在Polars DataFrame中填充_null`?

Pandas:使列中的列表大小与另一列中的列表大小相同

Python:使用asyncio.StreamReader.readline()读取长行

运行从Airflow包导入的python文件,需要airflow实例?

使用OpenPYXL切换图表上的行/列