将 pandas 数据框转换为列表列表以输入 RNN
Posted
技术标签:
【中文标题】将 pandas 数据框转换为列表列表以输入 RNN【英文标题】:Converting a pandas dataframe to a list of lists for input into an RNN 【发布时间】:2018-03-27 15:06:14 【问题描述】:在 Python 中,我有一个使用 pandas.read_csv
导入的数据框,例如:
Cust_id| time_to_event_f |event_id |event_sub_id
1 100 5 2
1 95 1 3
1 44 3 1
2 99 5 5
2 87 2 2
2 12 3 3
数据按cust_id
和time_to_event_f
排序。我正在尝试将此数据帧转换为维度张量[2,3,3]
,以便对于每个客户ID,我都有一个time_to_event_f
、event_id
和event_sub_id
的顺序列表。这个想法是将其用作张量流中 RNN 的输入。我正在关注this tutorial,所以我正在尝试以类似的格式获取我的数据。
【问题讨论】:
【参考方案1】:您可以通过设置Cust_id
索引然后堆叠将原始数据框d
转换为以客户ID 为中心的系列:
d.set_index('Cust_id').stack()
结果系列将如下所示:
Cust_id
1 time_to_event_f 100
event_id 5
event_sub_id 2
time_to_event_f 95
event_id 1
event_sub_id 3
time_to_event_f 44
event_id 3
event_sub_id 1
2 time_to_event_f 99
event_id 5
event_sub_id 5
time_to_event_f 87
event_id 2
event_sub_id 2
time_to_event_f 12
event_id 3
event_sub_id 3
dtype: int64
鉴于此表示,您的任务很简单:获取 values
ndarray 并将其重塑为您的目标大小:
series.values.reshape([2, 3, 3])
这个数组可以作为 tensorflow RNN 的输入。完整代码如下:
import pandas as pd
from io import StringIO
s = StringIO("""
1 100 5 2
1 95 1 3
1 44 3 1
2 99 5 5
2 87 2 2
2 12 3 3
""".strip())
d = pd.read_table(s, names=['Cust_id', 'time_to_event_f', 'event_id', 'event_sub_id'], sep=r'\s+')
series = d.set_index('Cust_id').stack()
time_array = series.values.reshape([2, 3, 3])
【讨论】:
以上是关于将 pandas 数据框转换为列表列表以输入 RNN的主要内容,如果未能解决你的问题,请参考以下文章