Pandas误解了CSV-fi中的日期列

2024-10-05 10:21:52 发布

您现在位置:Python中文网/ 问答频道 /正文

input.csv,

第一列没有标题。头值类似于(\tdate\tg1_o\tg1_h\tg1_l\tg1_c\tg2)

        date        g1_o    g1_h     g1_l   g1_c    g2
1945    01-11-2017  123.3   126.4   122.5   124.35  1540064.0
1946    02-11-2017  124.35  128.2   123.3   127.0   3962419.0
1947    03-11-2017  127.8   128.05  124.8   125.25  1672188.0
1948    06-11-2017  125.05  126.45  122.95  125.45  1457863.0
1949    07-11-2017  126.0   126.55  119.4   121.25  2404566.0
1950    08-11-2017  121.0   123.1   117.35  118.0   2737696.0
1951    09-11-2017  118.3   121.45  117.7   119.95  1512002.0
1952    10-11-2017  122.3   122.6   118.6   119.75  2630131.0
1953    13-11-2017  119.7   120.1   114.8   116.0   2407190.0
1954    14-11-2017  114.9   116.5   113.9   115.75  1228325.0
1955    15-11-2017  116.0   116.0   112.4   113.45  933757.0
1956    16-11-2017  114.4   116.25  113.0   115.45  1323516.0
1957    17-11-2017  116.95  117.6   115.05  116.25  1253531.0
1958    20-11-2017  118.3   120.95  116.5   120.2   3044296.0
1959    21-11-2017  120.85  120.95  118.1   119.05  947658.0
1960    22-11-2017  119.0   121.1   117.5   120.35  1875986.0
1961    23-11-2017  121.4   121.7   118.9   119.9   2099127.0
1962    24-11-2017  120.0   122.0   119.4   121.3   1425134.0
1963    27-11-2017  121.3   121.45  119.2   120.55  2021124.0
1964    28-11-2017  120.45  121.7   119.3   120.05  1770775.0
1965    29-11-2017  119.5   120.25  117.9   118.3   1021924.0
1966    30-11-2017  118.3   118.3   115.7   116.2   1848217.0
1967    01-12-2017  117.35  117.65  114.35  114.9   1183132.0

下面是为g1_c生成DataFrame的代码,即close和给定的date range。你知道吗

def create_date_range():
    start = "2017-11-01"
    end = "2017-12-01"
    return pd.date_range(start, end)


def get_stocks_data(symbol):
    df1 = pd.read_csv("../../Stock_data/{}.csv".format(symbol),
                      sep='\t',
                      lineterminator='\n',
                      usecols=["date", "g1_c"],
                      index_col="date",
                      parse_dates=True
                      )
    df1 = df1.rename(columns={"g1_c": symbol})    
    return df

ind = create_date_range()
df = pd.DataFrame(index=ind)
symbols = ["input"]
d = get_stocks_data(symbols[0])
p = df.join(d, how="inner")
print(p)

它给出下面的输出,但是值2017-11-0181.00,但是输入.csv文件包含2017-11-01的数据是124.35,并且有许多地方的数据不匹配。某些日期的输出是正确的,比如2017-11-302017-11-292017-11-28等等。你知道吗

而且对于2017-11-022017-11-03也没有结果,我认为join有一些问题。你知道吗

               input
2017-11-01   81.00
2017-11-04   98.10
2017-11-05  101.70
2017-11-07  100.50
2017-11-08  108.60
2017-11-09  124.95
2017-11-10  118.85
2017-11-12  114.65
2017-11-13  116.00
2017-11-14  115.75
2017-11-15  113.45
2017-11-16  115.45
2017-11-17  116.25
2017-11-20  120.20
2017-11-21  119.05
2017-11-22  120.35
2017-11-23  119.90
2017-11-24  121.30
2017-11-27  120.55
2017-11-28  120.05
2017-11-29  118.30
2017-11-30  116.20
2017-12-01   83.10

为什么数据不一致,只针对某个日期??你知道吗


Tags: csv数据dataframedfinputdatadatedef
1条回答
网友
1楼 · 发布于 2024-10-05 10:21:52

看来你的约会是从第一天开始的。pandas这样可能会误解您的日期,因此请确保在加载csv时指定dayfirst=True

df1 = pd.read_csv(
      "../../Stock_data/{}.csv".format(symbol),
      sep='\t',
      lineterminator='\n',
      usecols=["date", "g1_c"],
      index_col="date",
      parse_dates=True,
      dayfirst=True
)

dayfirst参数被转发到date parser library(该库解析熊猫的日期),后者根据需要处理日期。你知道吗

相关问题 更多 >

    热门问题