【发布时间】:2018-04-19 13:46:56
【问题描述】:
我有一个大 txt 文件(~300 mb),其值和形状如下:
df= pd.read_csv('file.txt')
df.head()
<Base> <DTYYYYMMDD> <TIME> <p1> <p2> <p3> <p4> <q>
36 x 20010102 235700 0.5622 0.5622 0.5622 0.5622 4
37 x 20010102 235800 0.5622 0.5622 0.5622 0.5622 4
38 x 20010102 235900 0.5622 0.5622 0.5622 0.5622 4
39 x 20010103 0 0.5618 0.5618 0.5618 0.5618 4
40 x 20010103 300 0.5622 0.5622 0.5622 0.5622 4
41 x 20010103 500 0.5622 0.5622 0.5622 0.5622 4
df.shape()
(5560000, 8)
我试图仅获取值 p4 并绘制每年的发生次数等。为此,我尝试首先将 DTYYYYMMDD 和 TIME 字段转换为字符串(它们从文本文件中读取为整数),然后将它们转换为 datetime,如下所示:
datestr = df['<DTYYYYMMDD>'].apply(lambda x: str(x))
timestr = df['<TIME>'].apply(lambda x: str(x))
zeros = timestr.apply(lambda x: '0' * (6- len(x)))
timestr = zeros + timestr
dtstr = datestr + timestr
p4_df = df['<p4>']
dt_datetime = pd.to_datetime(dtstr, format = '%Y%m%d%H%M%S')
p4_df.index = dt_datetime
现在我试图单独获取日期部分,以便我可以对其进行分组并计算出现次数。我还需要保留完整的日期时间索引,因为我需要在其他计算中使用它。
p4_df['Date'] = dt_datetime.apply(lambda x: x.date())
to_plot = p4_df.groupby(['Date'])['<p4>'].count()
to_plot.plot()
dt_datetime.apply 行出现内存错误。我尝试使用以下方法,但仍然出现错误:
p4_df['Date'] = pd.to_datetime(datestr, format = '%Y%m%d')
有什么建议可以提高代码的内存效率吗?
【问题讨论】:
标签: pandas datetime memory time-series vectorization