切片pandas原始数据帧(在重新组织数据之前)

时间:2018-04-16 12:25:52

标签: python arrays pandas dataframe object-slicing

这是我的第一篇文章,但我会尽力使其相关。

我有来自晨星的DataReader新近导入的股票价格数据框。它看起来像这样:

print df.head()
                Close     High     Low    Open    Volume Symbol
Symbol Date                                                        
AAPL   2018-03-01  175.00  179.775  172.66  178.54  48801970   AAPL
       2018-03-02  176.21  176.300  172.45  172.80  38453950   AAPL
       2018-03-05  176.82  177.740  174.52  175.21  28401366   AAPL
       2018-03-06  176.67  178.250  176.13  177.91  23788506   AAPL
       2018-03-07  175.03  175.850  174.27  174.94  31703462   AAPL

我想引用数据框中的特定单元格,尤其是给定股票的最后一行中的值。有255行。

请注意,数据框是多个DataReader提取的串联。我是通过StackOverflow上的代码创建的,只需稍加更新和更改:

rawdata = [] # initializing empty dataframe
for ticker in tickers: 
    fetched = web.DataReader(ticker, "morningstar", start='3/1/2018', end='4/15/2018') # bloody month/day/year
    fetched['Symbol'] = ticker # add a symbol column
    rawdata.append(fetched)

stocks = pd.concat(fetched) # concatenate all the dfs

现在

print df[255:]

返回包含列名的最后一行,

print df[255:].values

返回最后一行的值。 但

print df[-1]

返回错误。 我需要在更新数据帧后引用最后一行,而不知道现在是否有x行或y行。为什么我不能做[-1]?

我环顾四周,找到了" iloc"值得注意的是,但我暂时试图保持这一点非常简单。

我也在寻找有关切片的问题。但

print df[255:['Close']]

返回错误"不可用类型" - 虽然已经有一个名为' Close'。

的专栏

是因为我的数据框没有正确编入索引吗?还是因为它不是csv呢? 我知道如何处理索引,以及如何写入csv。我肯定必须在某个阶段以更好的方式组织数据。但我不明白为什么我不能使用当前数据格式调用特定单元格的最后一行或切片。

感谢您的关注

1 个答案:

答案 0 :(得分:2)

使用DataFrames

切片[]时需要小心

当您只提供一个参数时,它会按列对DataFrame进行切片。当您撰写df[-1]时,您将获得KeyError: -1,因为您的df没有标记为-1的列。

如果要切片最后一行,则需要使用[]添加分号,或者如果您想要超级安全,请使用.iloc

希望这能说明这一点。我已经添加了一个标有-1的列,只是为了向您展示df[-1]实际会做什么。

import pandas as pd
df = pd.DataFrame({'value': [-2,-1,0,1,2],
                  'name': ['a', 'b', 'c', 'd', 'e'],
                  -1: [1,2,3,4,5]})

#   value name  -1
#0     -2    a   1
#1     -1    b   2
#2      0    c   3
#3      1    d   4
#4      2    e   5

df[-1]
#0    1
#1    2
#2    3
#3    4
#4    5
#Name: -1, dtype: int64

df[-1:] # or df.iloc[-1:]
#   value name  -1
#4      2    e   5