Как можно извлечь строки между нулями, используя Python или Pandas? - PullRequest
0 голосов
/ 13 октября 2019

У меня есть csv fie (или куча CSV-файлов) со следующими данными.

          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

и т. Д. Для всех строк в файле.

Я доволен либо питоническим подходом, либо пандами, и посмотрел на различные примеры. однако опубликованный не может решить эту загадку до сих пор. Пожалуйста, помогите и дайте мне знать, если вам нужна дополнительная информация. Спасибо

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Используйте Series.isna + Series.cumsum + DataFrame.groupby для создания групп на основе указанных критериев. Затем вы можете получить их и сохранить их в списке, используя get_group:

groups=df['Datetime'].isna().cumsum()
grouper=df.groupby(groups)
dfs=[grouper.get_group(g) for g in groups]

. Это создаст список DataFrame, который будет тем, который вы ищете.

Если вы укажете, где вы хотите сохранить полученные кадры данных, я буду рад изменить свой ответ, чтобы помочь вам.

Примечание. Я думаю, что вы хотите различать на основеNaN столбца Datetime. Если вы хотите сделать это на основе другого столбца, просто измените этот ярлык

0 голосов
/ 13 октября 2019

Как я понял, вы хотите преобразовать свой DataFrame в список DataFrames (сегментов исходного DataFrame).

Каждый «сегмент» должен заканчиваться в конце последовательностизначений "not- NaT " и следующей последовательности значений NaT должны быть началом следующего "сегмента".

Чтобы обеспечить такую ​​"обрезку",сгруппируйте ваш DataFrame следующим образом:

gr = df.groupby((df['Datetime'].isna() & df['Datetime']\
    .shift().notna()).cumsum())

Затем сгенерируйте ваш список следующим образом:

dfs = [ grp for _, grp in gr ]

Таким образом, мое решение разделит ваш DataFrame на три сегмента (ключ == [0..4], [5..7] и [8..9]), тогда как другое решение разделяет его на десять сегментов (что-то там должно быть не так).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...