加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在Pandas DataFrame中分割列表

发布时间:2020-12-16 23:27:46 所属栏目:Python 来源:网络整理
导读:我有一个包含许多列的csv文件.使用大熊猫,我将这个csv文件读入数据框,并有一个datetime索引和五六个其他列. 其中一列是时间戳列表(下面是索引示例) CreateDate TimeStamps4/1/11 [Timestamp('2012-02-29 00:00:00'),Timestamp('2012-03-31 00:00:00'),Timest
我有一个包含许多列的csv文件.使用大熊猫,我将这个csv文件读入数据框,并有一个datetime索引和五六个其他列.

其中一列是时间戳列表(下面是索引示例)

CreateDate     TimeStamps
4/1/11         [Timestamp('2012-02-29 00:00:00'),Timestamp('2012-03-31 00:00:00'),Timestamp('2012-04-25 00:00:00'),Timestamp('2012-06-30 00:00:00')]
4/2/11         [Timestamp('2014-01-31 00:00:00')]
6/8/11         [Timestamp('2012-08-31 00:00:00'),Timestamp('2012-09-30 00:00:00'),Timestamp('2012-11-07 00:00:00'),Timestamp('2013-01-10 00:00:00'),Timestamp('2013-07-25 00:00:00')]

我想做的是将时间戳列转换为列出的每个时间戳记的不同行.例如,对于第1行,它将转换为4行,第2行将转换为1行.我意识到我需要重新设置索引才能做到这一点,这是很好的.

我尝试过的一切都是最终进入左边的领域(取值并在熊猫之外创建一个列表)

任何建议赞赏.

解决方法

如果你想留在纯大熊猫,你可以扔一个棘手的小组,并应用哪个最终沸腾到一个班轮,如果你不计算列重命名.
In [1]: import pandas as pd

In [2]: d = {'date': ['4/1/11','4/2/11'],'ts': [[pd.Timestamp('2012-02-29 00:00:00'),pd.Timestamp('2012-03-31 00:00:00'),pd.Timestamp('2012-04-25 00:00:00'),pd.Timestamp('2012-06-30 00:00:00')],[pd.Timestamp('2014-01-31 00:00:00')]]}

In [3]: df = pd.DataFrame(d)

In [4]: df.head()
Out[4]: 
     date                                                 ts
0  4/1/11  [2012-02-29 00:00:00,2012-03-31 00:00:00,201...
1  4/2/11                              [2014-01-31 00:00:00]

In [5]: df_new = df.groupby('date').ts.apply(lambda x: pd.DataFrame(x.values[0])).reset_index().drop('level_1',axis = 1)

In [6]: df_new.columns = ['date','ts']

In [7]: df_new.head()
Out[7]: 
     date         ts
0  4/1/11 2012-02-29
1  4/1/11 2012-03-31
2  4/1/11 2012-04-25
3  4/1/11 2012-06-30
4  4/2/11 2014-01-31

由于目标是使用列(在这种情况下为日期)的值,并重复该列,您将从列表中创建的多个行的所有值,考虑熊猫索引是有用的.

我们希望日期成为新行的单个索引,所以我们使用groupby将所需的行值放入索引.然后在那个操作里面,我想分割这个日期的这个列表,这是适用于我们的.

我正在通过应用一个由单个列表组成的熊猫系列,但是我可以通过.values [0]访问该列表,该值将系列的唯一行推送到具有单个条目的数组.

要将列表转换成一组将被传回到索引日期的行,我可以将其设置为DataFrame.这引起了追加额外索引的惩罚,但是我们最终会丢弃它.我们可以使这个索引本身,但这将排除dupe值.

一旦这个被传回来,我有一个多索引,但是我可以强制这个我们希望通过reset_index的行格式.然后我们简单地删除不需要的索引.

这听起来很重要,但是我们只是利用大熊猫功能的自然行为来避免显式的迭代或循环.

速度明智这往往是非常好的,因为它依赖于应用在这里应用工作的任何并行技巧.

可选地,如果您希望它对于具有嵌套列表的多个日期是稳健的:

df_new = df.groupby('date').ts.apply(lambda x: pd.DataFrame([item for sublist in x.values for item in sublist]))

在这一点上,一个衬垫变得密集,你应该可以抛入一个功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读