读取列中包含时间值的csv文件,并尽可能高效地获取包含1列值和日期时间索引的数据帧。我做了一个read_csv,然后是一个stack和下面的函数,但是这会消耗更多的时间和内存。
有人有更好的方法吗?
df.apply(lambda row: row['DATE'] + relativedelta( hours = int(row['level_2'][2:])), axis=1)
DATE H01 H02 H03 H04 ...
2014/01/01 1.2 2.4 3.3 4.1
2014/01/02 4.3 2.6 3.2 4.1
并获得:
DATE
2014-01-01 00:00:00 1.2
2014-01-01 01:00:00 2.4
2014-01-01 02:00:00 3.3
2014-01-01 03:00:00 4.1
您要查找的命令是堆栈
。留档中的更多信息:http://pandas.pydata.org/pandas-docs/stable/reshaping.html#reshaping-by-stacking-and-unstacking
基本上,您正在考虑使用堆栈,然后将Hxx
转换为xx: 00:00
,这应该很简单。
如果每小时(即24小时)都有一列,并且每个日期都存在,那么最好使用numpy进行重新整形(速度会快得多),只需通过date\u range
生成DatetimeIndex即可。
假设日期是索引(它是一个DatetimeIndex),其他24列是小时:
vals = df.values.reshape(-1)
new_index = pd.date_range(start=df.index[0], periods=24*len(df), freq='H')
pd.Series(vals, new_index)
否则,您可以使用itertools产品创建新索引。。。。首先,我将在以下时间制作专栏:
df.columns = np.arange(0, len(df.columns)) * pd.offsets.Hour(1)
In [11]: df
Out[11]:
<0 * Hours> <Hour> <2 * Hours> <3 * Hours>
DATE
2014-01-01 1.2 2.4 3.3 4.1
2014-01-02 4.3 2.6 3.2 4.1
注意:同样,重要的是DATE在这里是一个DatetimeIndex。
from itertools import product
new_index = [t + td for t, td in product(df.index, df.columns)]
In [21]: pd.Series(df.values.reshape(-1), new_index)
Out[21]:
2014-01-01 00:00:00 1.2
2014-01-01 01:00:00 2.4
2014-01-01 02:00:00 3.3
2014-01-01 03:00:00 4.1
2014-01-02 00:00:00 4.3
2014-01-02 01:00:00 2.6
2014-01-02 02:00:00 3.2
2014-01-02 03:00:00 4.1
dtype: float64
我是熊猫数据框的新手,我想应用一个函数,在同一列中取几行。就像当你应用函数diff(),但我想计算文本之间的距离。所以我定义了一个测量距离的函数,我试图使用应用,但我不知道如何选择几行。下面我展示了一个我尝试过的例子和我所期望的: 但它不起作用。我想得到的是: 提前感谢您为我提供的任何帮助。
我必须从二维坐标计算希尔伯特曲线上的距离。使用hilbertcurve包,我构建了自己的“hilbert”函数。坐标存储在数据帧(列1和列2)中。如您所见,我的函数在应用于两个值(test)时有效。 然而,它只是不工作时,应用行明智通过应用函数!这是为什么呢?我到底做错了什么?我需要一个额外的列“希尔伯特”,希尔伯特距离在列“col_1”和“col_2”中给出。 最后一个命令以错误结束: 谢谢你的
我使用的mysql2库与NodeJS。我在本地机器和服务器上有相同的代码和数据库结构。当我上传一张照片到“照片”表时,在我的本地机器上,它工作正常。当我使用服务器时,我得到以下错误: {错误:数据太长,列'照片'在第1行Packet.as错误(/srv/project/server/node_modules/mysql2/lib/数据包/packet.js:716: 13)在查询。Command.
您好,Python新手,正在努力让TimeZoneFinder为我工作。我想根据其他两列中的地理位置,将timezone_at()应用于timezone列。关于如何使这项工作有效,有什么建议吗? 错误:
我从这个URL刮取了这个表: "https://www.patriotsoftware.com/blog/accounting/average-cost-living-by-state/" 看起来像这样: 然后我编写了这个函数来帮助我将字符串转换成整数: 当我只将函数应用于一列时,它就会工作。我在这里找到了关于在多个列上使用的答案:如何将函数应用于多个列 但我下面的代码不起作用,也不会产生错误:
并将其应用于数据表的一列--这是我希望这样做的: 我还没有找到任何简单的方法,正在努力找出如何做到这一点。一定有一个更简单的方法,比将数据rame转换为和RDD,然后从RDD中选择行来获得正确的字段,并将函数映射到所有的值,是吗?创建一个SQL表,然后用一个sparkSQL UDF来完成这个任务,这更简洁吗?