5

我正在学习使用 pandas,将其用于一些数据分析。数据以 csv 文件的形式提供,有几列,我只需要使用 4 列(日期、时间、o、c)。我想创建一个新的 DataFrame,它使用 DateTime64 数字作为索引,这个数字是通过合并前两列创建的,在合并的字符串上应用 pd.to_datetime。

我的加载程序代码工作正常:

st = pd.read_csv("C:/Data/stockname.txt", names=["date","time","o","h","l","c","vol"])

挑战是将加载的 DataFrame 转换为具有正确格式的新 DataFrame。下面的工作,但很慢。此外,它只是用新的 datetime64 格式创建一列,并没有使其成为索引。

我的代码

st_new = pd.concat([pd.to_datetime(st.date + " " + st.time), (st.o + st.c) / 2, st.vol], 
     axis = 1, ignore_index=True)

合并两列并将函数应用到结果中的更 Pythonic 方式是什么?如何使新列成为 DataFrame 的索引?

4

2 回答 2

10

您可以在read_csv函数中执行所有操作:

pd.read_csv('test.csv',
            parse_dates={'timestamp': ['date','time']},
            index_col='timestamp',
            usecols=['date', 'time', 'o', 'c'])

parse_dates告诉read_csv函数将dateandtime列合并为一timestamp列并将其解析为时间戳。(熊猫足够聪明,知道如何解析各种格式的日期)

index_coltimestamp列设置为索引。

usecols告诉read_csv函数只选择列的子集。

于 2013-08-07T23:31:36.017 回答
0

至于加载数据,我想你已经明白了。要设置索引,请执行以下操作:

st_new = pd.concat([(st.o + st.c) / 2, st.vol], axis=1, ignore_index=True)
st_new.set_index(pd.to_datetime(st.date + " " + st.time), drop=True, inplace=True)

set_index.

于 2013-08-07T23:22:57.793 回答