这是我的第一篇文章,但我会尽力使其相关。
我有来自晨星的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。我肯定必须在某个阶段以更好的方式组织数据。但我不明白为什么我不能使用当前数据格式调用特定单元格的最后一行或切片。
感谢您的关注
答案 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