熊猫在读取CSV数据文件时返回的错误最大值

时间:2020-03-14 17:24:40

标签: python pandas csv

我正在尝试通过读取两个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

2 个答案:

答案 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