【问题标题】:Am I missing something when Trimming/truncating? [duplicate]修剪/截断时我错过了什么吗? [复制]
【发布时间】:2018-09-16 15:40:12
【问题描述】:

我似乎看不出这里有什么问题。我有一个长度为 (16110) 的 Pandas Series 和一个形状为 (13, 16116) 的 DataFrame。我只是想将DataFrame 修剪到我的Series 的长度。

我认为这将是一个简单的问题:

df = df[:len(series)]

这段代码运行没有错误,但在缩短方面似乎没有太多作用。

我错过了什么吗?

【问题讨论】:

  • df.loc[:,:len(series)]

标签: python pandas trim


【解决方案1】:

显然你想要DataFrame.head

这是一种方便的方法;基本上head(self, n) 返回self.iloc[:n]

请注意,这不是切割原始框架。据我所知,它返回原始帧的视图(子集)。某些类型的切片返回副本; it depends on context and is not very easy to predict.

【讨论】:

  • 有道理,所以我正在扩展它。
  • 这也不会得到询问者他们在寻找什么......
  • @RCA:我认为任何基于iloc 的东西实际上都不会削减框架。但是对常规 Python 列表进行切片也不会削减它,因此 foo = bar[:bound] 的预期行为是“提供更短的表示”而不是“释放未使用的部分”。
  • 你更长的答案是有道理的。
  • 此答案不适用于提供的输入。 df 的形状为 (13, 16116) - 我们正在对列而不是行进行切片。提供输入的解决方案是df.iloc[:, :len(series)]
【解决方案2】:

这是另一种方式,使用df.truncate

df = df.truncate(after=len(series)-1)

例子:

>>> df
          0         1         2         3         4
0 -0.615868  0.367161  0.138472 -0.353085  0.953871
1  0.063501 -0.256693  0.895870  0.368182  0.156447
2 -0.148034 -0.572105 -3.030083  1.092318 -2.635359
3 -1.038899  1.198679  2.633639 -0.149085 -1.574603
4 -2.639766  1.377038 -1.263696 -1.999058 -1.540654
5  1.683478 -0.403260 -1.551362 -0.007200  0.240715
6  1.033099  0.659052 -0.306415  0.086918 -1.523796
7 -1.514313  0.117010  0.490440  0.497393  0.123755
8  0.078399  0.218355 -0.255076 -0.474265 -0.430907
9  0.868665  1.917818  1.303568  1.772729 -0.446849

>>> series
0    0.311083
1    0.498019
2   -0.671698
dtype: float64

>>> df.truncate(after=len(series)-1)
          0         1         2         3         4
0 -0.615868  0.367161  0.138472 -0.353085  0.953871
1  0.063501 -0.256693  0.895870  0.368182  0.156447
2 -0.148034 -0.572105 -3.030083  1.092318 -2.635359

不过,请注意,我无法重现您的问题。例如:

df[:len(series)]

也返回一个截断的df

>>> df[:len(series)]
          0         1         2         3         4
0 -0.615868  0.367161  0.138472 -0.353085  0.953871
1  0.063501 -0.256693  0.895870  0.368182  0.156447
2 -0.148034 -0.572105 -3.030083  1.092318 -2.635359

【讨论】:

  • 也许检查 df ,shape ,我认为切片列是关键,而不是行
  • 我不确定我是否理解。此外,从形状为(10,5)df 和一系列len 3 开始,我最终使用df[:len(series)] 截断了形状为(3,5)df(参见编辑后的帖子),所以它似乎调整行而不是列......也许我错过了一些东西......
猜你喜欢
  • 1970-01-01
  • 2012-02-01
  • 2021-06-23
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 2021-09-14
  • 2017-10-25
相关资源
最近更新 更多