我需要基于 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 specifique
与 impulsion spécifique
)这会带来错误。您将需要为这些创建错误处理过程。或者也许强制执行某种模式,但这超出了这个问题的范围。
关于python - 如何从带有注释的txt文件创建pandas数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74583565/