这是我的第一篇文章,但我会尽力使其相关。
我有一个从晨星用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 行。
请注意,数据帧是多个数据读取器提取的串联。我从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 行。为什么我不能做 df[-1] ?
我环顾四周,发现了"iloc"的技术,但我目前试图保持非常简单。
我还寻找了有关切片的问题。但
print df[255:['Close']]
返回错误"不可哈希类型" - 尽管已经有一个名为"关闭"的列。
是因为我的数据帧未正确编制索引吗?还是因为它还不是csv? 我知道如何处理索引,以及如何写入 csv。在某个阶段,我肯定必须以更好的方式组织数据。但是我不明白为什么我不能使用当前数据格式调用特定单元格的最后一行或切片。
感谢您的关注
用[]
切片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