python - 如何从带有注释的txt文件创建pandas数据框?

标签 python pandas dataframe concatenation txt

我需要基于 4 个 txt 文件创建一个 pandas 数据框,其中包含基于以下结构的注释(在阅读时跳过):

# 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

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

最佳答案

如果您的 txt 文件的内容如您刚才所示,您可以使用 pandas 作为 CSV 文件来读取它们。

pandas.read_csv函数有很多东西可以帮助你:

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

现在,让我们尝试使用 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 - 如何从带有注释的txt文件创建pandas数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74583565/

相关文章:

python - 如何绘制 pandas 数据框的第二列?

python - 如何计算列中时间戳之间的( Pandas )时间增量?

python - 为什么在数据帧上具有中位数的 fillna 仍然在 pandas 中留下 Na/NaN?

python - Pandas read_sql 函数生成二进制列名

Python 输入/输出、文件

python - 以元组形式传递多个参数

python - 类型提示与鸭子类型

Python:将列中的 "NA"替换为另一列的相应行值中的值(反之亦然)

python - Django Python 垃圾收集问题

pandas - 如何使用 pandas 数据框计算列的平均脉冲计数?