【问题标题】:Finding first and last rows in Pandas Dataframes for individual files在 Pandas Dataframes 中查找单个文件的第一行和最后一行
【发布时间】:2017-05-08 02:08:57
【问题描述】:

我有一个由多个 .fits 文件组成的 Pandas 数据框,每个文件包含多个带有单独标签的列。我想提取一列并创建包含所述列的第一行和最后一行的变量,但是对于单个 .fits 文件而不仅仅是整个 Dataframe,我很难做到这一点。任何帮助,将不胜感激! :)

这是我读取文件的方式:

path = '/Users/myname/folder/'
m = [os.path.join(dirpath, f)
    for dirpath, dirnames, files in os.walk(path)
    for f in fnmatch.filter(files, '*.fits')]

^^^ 这会递归地搜索我的目录,其中包含许多子文件夹中的多个 .fits 文件。

dataframes = []
for ii in range(0,len(m)):
    data = pd.read_csv(m[ii], header = 'infer', delimiter = '\t')
    d = pd.DataFrame(data)
    top = d['desired_column'].head()
    bottom = d['desired_column'].tail()
    First_and_Last = pd.concat([top,bottom])

我尝试对 Pandas Dataframes 使用 .head 和 .tail 命令,但我不确定如何正确使用它来满足我的需求。对于我在 fit 文件中的读取方式,以下代码为我提供了前几行和最后几行(准确地说是 5,head 和 tail 的默认值为 5),如下所示:

0       2.456849e+06
1       2.456849e+06
2       2.456849e+06
3       2.456849e+06
4       2.456849e+06
1118    2.456852e+06
1119    2.456852e+06
1120    2.456852e+06
1121    2.456852e+06
1122    2.456852e+06

我想要做的是尝试获取我想要的特定列的每个 .fits 文件的第一行和最后一行,而不仅仅是包含 .fits 文件的 Dataframe。以我在 .fits 文件中阅读的方式,Dataframe 似乎将所有文件连接在一起。关于如何实现这一目标的任何提示?

【问题讨论】:

  • 澄清一下,你是说你得到了整个数据帧的第一个和最后一个 5。它由几个 fit 文件组成。但是您的代码会建议 First_and_Last 仅包含您读入的最后一个文件的第一个和最后 5 个。也许您没有发布所有代码?

标签: python pandas dataframe


【解决方案1】:

如果你只想要第一行:

top = d['desired_column'].head(1)

如果你只想要最后一行:

bottom = d['desired_column'].tail(1)

我没有发现“Dataframe 似乎将所有文件连接在一起”的问题。请您澄清一下这个问题吗?
顺便说一句,在data = pd.read_csv(m[ii], header = 'infer', delimiter = '\t') 之后,data 已经是DataFrame。因此,d = pd.DataFrame(data) 是不必要的。

【讨论】:

    【解决方案2】:

    .iloc 函数应该可以轻松拉出顶行和底行,其中 df["col_1"] 下面表示感兴趣的列

    In [28]: import pandas as pd
    
    In [29]: import numpy as np
    
    In [30]: np.random.seed(42)
    
    In [31]: df = pd.DataFrame(np.random.randn(6,3), columns=["col_1", "col_2", "col_3"])
    
    In [32]: df
    Out[32]: 
          col_1     col_2     col_3
    0  0.496714 -0.138264  0.647689
    1  1.523030 -0.234153 -0.234137
    2  1.579213  0.767435 -0.469474
    3  0.542560 -0.463418 -0.465730
    4  0.241962 -1.913280 -1.724918
    5 -0.562288 -1.012831  0.314247
    
    In [33]: pd.Series([df["col_1"].iloc[0], df["col_1"].iloc[-1]]) # pd.Series([top, bottom]) ; or pd.DataFrame([top, bottom]), if data frame needed.
    Out[33]: 
    0    0.496714
    1   -0.562288
    dtype: float64
    

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      相关资源
      最近更新 更多