我正在尝试通过读取两个CSV文件来计算最高股价和最新日期(今天)-使用pandas max()函数。但是,从CSV文件“关闭/最后一次”列之一返回的最大值似乎难以置信。
# Read in Libaries
import pandas as pd
# Define Functions
def get_max_close(symbol):
""" Return the max closing value for stock indicated by symbol."""
df = pd.read_csv("Data\{}.csv".format(symbol)) # Read in data
return df[' Close/Last'].max(), df['Date'].max() #compute Max and return the data to test_run
def test_run():
"""Function called by Test Run"""
for symbol in ['AAPL','IBM']:
print ("Max close")
print (symbol, get_max_close(symbol))
# Main Program
if __name__=="__main__":
test_run()
我得到的答案是: 最大收盘价 AAPL('$ 99.99','12 / 31/2019') 最大收盘价 IBM('$ 215.8','12 / 31/2019')
很明显,最大值超过$ 99.99,并且日期已过时。
我也更新了熊猫库。但是,错误仍然存在。任何帮助,我们将不胜感激。
CSV文件APL具有以下数据(示例): AAPL.CSV File Data Image
答案 0 :(得分:1)
df <- data.frame(ID = c("a","b","c"),rbind(a,b,c))
是一个字符串,而不是数字。我不知道熊猫的max方法如何在字符串上工作。无论如何,在获取最大值之前将数据转换为适当的浮点值会更安全。相同的问题可能会导致您的日期出现问题。熊猫有专门的日期类型。函数' $99.99'
可用于相应地转换数据。然后,我希望max方法能够按预期工作。
答案 1 :(得分:0)
日期值应使用pd.to_datetime()
转换为日期类型。货币采用字符串格式,因此您需要去除$符号并将其转换为float
df['Date'] = pd.to_datetime(df['Date'])
df['Close/Last'] = df['Close/Last'].apply(lambda x: x[1:]).astype(float)
print(df['Close/Last'].max())
print(df['Date'].max())
输出:
302.74
2020-03-13 00:00:00