【问题标题】:Pandas (0.16.2) Show 3 Rows of DataframePandas (0.16.2) 显示 3 行数据框
【发布时间】:2015-11-04 01:27:27
【问题描述】:

我正在尝试将 pandas 数据框的输出限制为前 3 行。但是,我得到了所有 500000 个数据点的摘要。当我在没有指定“Time [s]”作为索引的情况下运行它时,它工作正常,我只得到 3 行数据。我正在运行 Pandas 0.16.2 和 Python 3。

%matplotlib inline
import pandas as pd
from sys import platform as _platform
import matplotlib.pyplot as plt
pd.set_option('display.mpl_style', 'default') # Make the graphs a bit prettier
plt.rcParams['figure.figsize'] = (15, 5)

shot1 = "C:\\Users\ELEC-LAB_1\Documents\GitHub\Black Powder\BlackPowder_Shot-1.csv"
shot1_data = pd.read_csv(shot1, parse_dates=['Time [s]'], index_col='Time [s]') # Read the data using the time as the index.
shot1_data[:3]

时间 [s] CH 1 [psi] CH 2 [psi] CH 3 [psi] CH 4 [psi] CH 5 [psi] CH 6 [psi] CH 7 [psi] CH 8 [psi] CH 9 [ psi] CH 10 [psi] CH 16 [V]

-0.200000 -0.018311 -0.054932 -0.012207 -0.054932 -0.006104 -0.048828 -0.030518 -0.018311 0.030518 -0.018311 0.011597

-0.199998 0.006104 0.109863 0.048828 0.048828 -0.018311 -0.054932 0.042725 0.054932 -0.042725 0.024414 0.010986

-0.199996 0.012207 -0.042725 0.061035 -0.097656 0.067139 0.006104 -0.054932 -0.067139 -0.097656 -0.134277 0.010986

-0.199994 0.012207 -0.006104 -0.079346 0.036621 -0.036621 0.042725 0.006104 0.067139 0.012207 -0.042725 0.011597

-0.199992 0.006104 0.067139 0.091553 0.091553 0.024414 0.012207 0.097656 -0.030518 -0.024414 0.061035 0.010986

-0.199990 0.036621 0.006104 0.061035 0.109863 0.073242 0.067139 0.109863 -0.054932 0.158691 0.000000 0.011597

500000 行 × 11 列

【问题讨论】:

  • shot1_data.head(3)
  • 看起来你正在做的是将索引设置为 datetimeindex 但然后尝试使用索引中不再存在的值来选择前三行进行切片:shot1_data[:3] if你做了shot1_data.head(3)shot1_data.iloc[:3] 然后它会做你所期望的

标签: pandas ipython-notebook


【解决方案1】:

您正在尝试使用无效的整数值对具有 datetimeindex 的 df 进行切片,这就是您获得完整 df 的原因。

例子:

In [34]:
df = pd.DataFrame(index=pd.date_range(start=dt.datetime(2015,1,1), end=dt.datetime(2015,1,10)))
df[:3]

Out[34]:
Empty DataFrame
Columns: []
Index: [2015-01-01 00:00:00, 2015-01-02 00:00:00, 2015-01-03 00:00:00, 2015-01-04 00:00:00, 2015-01-05 00:00:00, 2015-01-06 00:00:00, 2015-01-07 00:00:00]

如果您使用headiloc[:3],那么您会得到想要的结果:

In [35]:
df.head(3)

Out[35]:
Empty DataFrame
Columns: []
Index: [2015-01-01 00:00:00, 2015-01-02 00:00:00, 2015-01-03 00:00:00]

In [36]:    
df.iloc[:3]

Out[36]:
Empty DataFrame
Columns: []
Index: [2015-01-01 00:00:00, 2015-01-02 00:00:00, 2015-01-03 00:00:00]

这就是为什么当您不将参数 index_col='Time [s]' 传递给 read_csv 时,您的代码行将作为默认的 int64 索引为您创建。

【讨论】:

  • 那么索引必须是整数还是 datetimeindex 必须是整数?
  • index 可以是任何东西,整数、浮点数、字符串、日期时间等,但您没有意识到的是尝试使用整数进行切片,但它试图做的是在您的索引中查找整数值不存在,因此为什么你得到整个 df,headiloc 不关心索引 dtype,所以它们按你的预期工作
  • 如果我使用 'shot1_data[:-0.199996]' 它只会显示前 3 行?
  • 不,你的索引是 datetimeindex 而不是浮点数,如果你做了shot1_data.index[:3] 你会看到你的索引的实际值,明白我的意思
  • 回答了我自己的问题。因此,无论您在数据框中使用什么索引,都必须使用该索引系统进行切片,无论是字符串 A、B、C、整数 0、1、2 还是浮点数 0.23、0.24、0.25。谢谢!
猜你喜欢
  • 2019-08-14
  • 2016-09-25
  • 2015-09-12
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 2019-07-08
  • 1970-01-01
相关资源
最近更新 更多