首页 > 解决方案 > 在 Python 中从 .dat 文件数据帧中读取

问题描述

我有一个.dat看起来像下面的文件....

#| step | Channel| Mode | Duration|Freq.| Amplitude | Phase| 
    0       1       AWG     Pi/2    100     2           1               
    1       1       SIN^2           100     1           1   
    2       1       SIN^2           200     0.5         1   
    3       1       REC     50      100     1           1               
    100     0       REC    Pi/2     150     1           1 

我创建了一个数据框,我想从数据框中读取提取数据,但出现错误

TypeError: expected str, bytes or os.PathLike object, not DataFrame

我的代码在下面,

import pandas as pd
import numpy as np
path = "updated.dat"
datContent = [i.strip().split() for i in open(path).readlines()]
#print(datContent)
column_names = datContent.pop(0)
print(column_names)

df = pd.DataFrame(datContent)
print(df)
extract_column = df.iloc[:,2]


with open (df, 'r') as openfile :
    for line in openfile:
        for column_search in line:
            column_search = df.iloc[:,2]
            if "REC" in column_search:
                print ("Rec found")

任何建议将不胜感激

标签: pythonpandasdataframereadfile

解决方案


由于您的帖子没有任何明确的问题,因此我必须根据您的代码进行猜测。我假设您想要得到的是在 DataFrame 中找到列Mode包含值REC的所有行。

基于此,我准备了一个适用于您的数据的小型、独立的示例。

在您的情况下,您应该使用的唯一行是最后一行。假设您的 DataFrame 已正确创建和填充,您print(df)可以通过这一行来交换下面的代码。

我真的建议您阅读有关从 DataFrames 中索引和选择数据的官方文档。https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html

import pandas as pd
from io import StringIO

data = StringIO("""
no;step;Channel;Mode;Duration;Freq.;Amplitude;Phase
;0;1;AWG;Pi/2;100;2;1
;1;1;SIN^2;;100;1;1
;2;1;SIN^2;;200;0.5;1
;3;1;REC;50;100;1;1
;100;0;REC;Pi/2;150;1;1
""")
df = pd.read_csv(data, sep=";")


df.loc[df.loc[:, 'Mode'] == "REC", :]

推荐阅读