Проверьте, если любое значение равно 0 в Python DataFrame - PullRequest
0 голосов
/ 13 июня 2018

У меня есть несколько CSV-файлов, таких как:

Time   Test Two Three Five Six Seven Eight Nine Ten Eleven Twelve Thirteen  Fifteen  Sixteen   
0       0   0    0    0   0     0    0     0   -0.3   0     0       100        0       0   
0.02    0   0    0    0   0     0    0     0  -0.1   0.05   0       99        28       0   
0.04    0   0    0    0   0     0    0     0  -0.15  0.05   0.9    99.6      28.7      0   
...

Мой код выглядит так:

list_of_dfs = [pandas.read_csv(filename) for filename in filenames]
for i in list_of_dfs:
    if any(x is 0 for x in i.Test):
        print("true")
    else:
        print("false")

Это показывает мне только ложь (даже i.Test всегда 0)

print(list_of_dfs[0].Test)

показывает

0      0
1      0
2      0
3      0
4      0
5      0
6      0
7      0
8      0
9      0
10     0
..
655    0
656    0
657    0
658    0
659    0
660    0
661    0
662    0
663    0
664    0
665    0
Name: Test, Length: 666, dtype: int64

Не должно быть

any(x is 0 for x in i.Test) 

всегда верно, как у меня в каждом i.Test минимум один "0" (так как они содержат только 0)

В чем моя ошибка?

1 Ответ

0 голосов
/ 13 июня 2018

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

Простопечати 'true' или 'false' может быть недостаточно, так как вам придется связать их с вашим списком кадров данных.Вместо этого я рекомендую использовать словарь для хранения ваших фреймов данных:

dict_of_dfs = {fn: pd.read_csv(fn) for fn in filenames}

Затем вы можете использовать словарь, чтобы сопоставить каждое имя файла с логическим значением в соответствии с вашим условием:

res = {fn: (df['test'] == 0).any() for fn, df in dict_of_dfs.items()}

Затем вы можете определить , какие фреймы данных удовлетворяют вашему условию, либо выполнив итерацию res.items(), либо указав определенное имя файла с помощью res['myfile.csv'].

Обратите внимание, что мы используем векторизованные операции, а не повторяем каждоеэлемент в серии по одному.Это особенность Pandas, которая отделяет ее от стандартного метода понимания списка Python или метода выражения генератора, который вы пытались использовать.Векторизованные операции обеспечивают эффективный доступ к смежным блокам памяти и должны быть предпочтительными, где это возможно.

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