如何使用Python或Pandas提取空值之间的行
我有一个csv或一堆csv数据如何使用Python或Pandas提取空值之间的行,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有一个csv或一堆csv数据 Datetime 89200000 89300000 ... 106200000 106300000 107900000 0 NaN NaN C202 ... C3A4 NaN C09C 1 NaN NaN BBC R2 ... Heart NaN Sangam 2
Datetime 89200000 89300000 ... 106200000 106300000 107900000
0 NaN NaN C202 ... C3A4 NaN C09C
1 NaN NaN BBC R2 ... Heart NaN Sangam
2 2019-09-09T00:05:00Z NaN 72 ... 64 NaN 37
3 2019-09-09T00:11:00Z NaN 72 ... 64 NaN 36
4 2019-09-09T00:17:00Z NaN 72 ... 64 NaN 36
5 NaN NaN C202 ... C3A4 NaN C09C
6 NaN NaN BBC R2 ... Heart NaN Sangam
7 2019-09-09T00:23:00Z NaN 72 ... 64 NaN 36
8 NaN NaN C202 ... C3A4 NaN C09C
9 NaN NaN BBC R2 ... Heart NaN Sangam
我需要提取行,以便得到以下结果-
Datetime 89200000 89300000 ... 106200000 106300000 107900000
0 NaN NaN C202 ... C3A4 NaN C09C
1 NaN NaN BBC R2 ... Heart NaN Sangam
2 2019-09-09T00:05:00Z NaN 72 ... 64 NaN 37
3 2019-09-09T00:11:00Z NaN 72 ... 64 NaN 36
4 2019-09-09T00:17:00Z NaN 72 ... 64 NaN 36
接着是
Datetime 89200000 89300000 ... 106200000 106300000 107900000
5 NaN NaN C202 ... C3A4 NaN C09C
6 NaN NaN BBC R2 ... Heart NaN Sangam
7 2019-09-09T00:23:00Z NaN 72 ... 64 NaN 36
8 NaN NaN C202 ... C3A4 NaN C09C
9 NaN NaN BBC R2 ... Heart NaN Sangam
对于文件中的所有行,依此类推
我对蟒蛇法或熊猫法都很满意,并且已经看过了各种各样的例子,但是到目前为止还不能解决这个难题。如果您需要更多信息,请帮助并让我知道。
谢谢使用++
根据上述标准创建组。然后,您可以使用以下方法获取它们并将它们保存在列表中:
这将创建一个数据帧列表,该列表将是您要查找的数据帧
如果您指定要保存结果数据帧的位置,我很乐意修改我的答案以帮助您
注意:我认为您需要根据Datetime列的NaN来进行区分。如果您想基于另一列进行此操作,只需更改此标签使用++
根据上述标准创建组。然后,您可以使用以下方法获取它们并将它们保存在列表中:
这将创建一个数据帧列表,该列表将是您要查找的数据帧
如果您指定要保存结果数据帧的位置,我很乐意修改我的答案以帮助您
注意:我认为您需要根据Datetime列的NaN来进行区分。如果您想基于另一列进行此操作,只需更改此标签,正如我所理解的,您希望将数据帧转换为 原始数据帧的数据帧段 每个段应在非NaT值序列的末尾结束 下面的NaT值序列应该是 下一节 要提供这种切割,请按如下方式对数据帧进行分组:
gr = df.groupby((df['Datetime'].isna() & df['Datetime']\
.shift().notna()).cumsum())
然后将您的列表生成为:
dfs = [ grp for _, grp in gr ]
因此,我的解决方案将您的数据帧分为三个关键部分==
[0..4]、[5..7]和[8..9],而另一种解决方案将其切割为
十段肯定有问题。据我所知,您希望将数据帧转换为 原始数据帧的数据帧段 每个段应在非NaT值序列的末尾结束 下面的NaT值序列应该是 下一节 要提供这种切割,请按如下方式对数据帧进行分组:
gr = df.groupby((df['Datetime'].isna() & df['Datetime']\
.shift().notna()).cumsum())
然后将您的列表生成为:
dfs = [ grp for _, grp in gr ]
因此,我的解决方案将您的数据帧分为三个关键部分==
[0..4]、[5..7]和[8..9],而另一种解决方案将其切割为
这里肯定有问题。谢谢-刚刚尝试了您的解决方案。它只需稍加修改即可工作,如下groups=df['Datetime'].isna&df['Datetime'].shift.notna.cumsum grouper=df.groupbygroups dfs=[g for ug,g in grouper]我借用了下面@Valdi_Bo提供的解决方案的最后一行,否则结果不是必需的。谢谢…谢谢-刚刚尝试了你的解决方案。它只需稍加修改即可工作,如下groups=df['Datetime'].isna&df['Datetime'].shift.notna.cumsum grouper=df.groupbygroups dfs=[g for ug,g in grouper]我借用了下面@Valdi_Bo提供的解决方案的最后一行,否则结果不是必需的。谢谢你…谢谢!它工作起来,大约在6秒钟内完成工作……这很好!:谢谢它工作起来,大约在6秒钟内完成工作……这很好!: