首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫不会一直跳过输入的行数作为跳绳参数吗?

熊猫不会一直跳过输入的行数作为跳绳参数吗?
EN

Stack Overflow用户
提问于 2019-01-25 17:30:24
回答 1查看 34关注 0票数 0

我正在使用Pandas来组织CSV文件,以便稍后使用matplotlib进行绘图。首先,我创建了一个Pandas来查找包含'Pt‘的线条。这就是我搜索用作标题行的内容。标题

然后,我保存这一行的索引,并在创建我将要使用的新的dataframe时,将它应用到skiprow参数中。

奇怪的是,取决于文件格式,即使找到了正确的索引,错误的行也会显示为标题。例如,请注意在Pandas第54行中,在选项卡后面有“Pt”:

第一个文件的正确索引

数据文件在这里正确地显示出来了。纠正第一个文件中的数据

对于另一个文件,第44行被正确地识别为具有“Pt”。第二个文件的正确索引

但是dataframe包括第43行作为标题!第二个文件上的数据不正确

我试过设置header=0,header=none。我是不是遗漏了什么?

这是代码

代码语言:javascript
复制
entire_df = pd.read_csv(file_path, header=None)

print(entire_df.head(60))
header_idx = -1
for index, row in entire_df.iterrows(): # find line with desired header
    if any(row.str.contains('Pt')):
        print("Yes! I have pt!")
        print("Header index is: " + str(index))
        print("row contains:")
        print(entire_df.loc[[index]])
        header_idx = index # correct index obtained!
        break

df = pd.read_csv(file_path, delimiter='\t', skiprows=header_idx, header=0) # use line index to exclude extra information above

print(df.head())

以下是给出不同结果的两个文件的部分。它们被保存为.dta文件。我不能分享所有的文件。

file1 (适当制作的数据)

代码语言:javascript
复制
FRAMEWORKVERSION    QUANT   7.07    Framework Version
INSTRUMENTVERSION   LABEL   4.32    Instrument Version
CURVE   TABLE   16875
Pt  T   Vf  Im  Vu  Pwr Sig Ach Temp    IERange Over
#   s   V   A   V   W   V   V   deg C   #   bits
0   0.1 3.49916E+000    -1.40364E-002   0.00000E+000    -4.91157E-002   -4.22328E-001   0.00000E+000    1.41995E+003    11  ...........
1   0.2 3.49439E+000    -1.40305E-002   0.00000E+000    -4.90282E-002   -4.22322E-001   0.00000E+000    1.41995E+003    11  ...........
2   0.3 3.49147E+000    -1.40258E-002   0.00000E+000    -4.89705E-002   -4.22322E-001

file2 (带有错误头的数据文件)

代码语言:javascript
复制
FRAMEWORKVERSION    QUANT   7.07    Framework Version
INSTRUMENTVERSION   LABEL   4.32    Instrument Version
CURVE   TABLE   18
Pt  T   Vf  Vm  Ach Over    Temp
#   s   V vs. Ref.  V   V   bits    deg C
0   2.00833 3.69429E+000    3.69429E+000    0.00000E+000    ........... 1419.95
1   4.01667 3.69428E+000    3.69352E+000    0.00000E+000    ........... 1419.95
2   6.025   3.69419E+000    3.69284E+000    0.00000E+000    ........... 1419.95
3   8.03333 3.69394E+000    3.69211E+000    0.00000E+000    ........... 1419.95

我会很感激你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-01-25 17:42:34

你应该注意你的缩进程度。您希望根据您的header_idx条件设置if any(row.str.contains('Pt'))的代码块具有与if语句相同的任天堂级别,这意味着它在for循环的每次迭代中执行,而不仅仅是在满足条件时执行。

代码语言:javascript
复制
for index, row in entire_df.iterrows():
    if any(row.str.contains('Pt')):
    [...]
    header_idx = index

这样调整缩进,将赋值置于if语句的控制之下:

代码语言:javascript
复制
for index, row in entire_df.iterrows():
    if any(row.str.contains('Pt')):
        [...]
        header_idx = index
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54370159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档