Сравнение интервалов не работает с оператором if - python - PullRequest
0 голосов
/ 08 января 2020

Я работаю над небольшим количеством кода, который позволил бы мне заполнить фрейм данных заданными c строками или значениями в зависимости от значения индекса и хранить все в dict. В качестве теста я хотел заполнить фрейм данных df на 'foo', если индекс был меньше или равен 3 или больше или равен 7 .

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

letter_list = ['a', 'b', 'c']

mydict = dict()

for letter in letter_list:
    df = pd.DataFrame()
    df = df.reindex(range(10))

    for i in df.index.astype(float):
        if i <= 3 or i >= 7:        
            df['toto'] = 'foo'

        else:
            df['toto'] = 'booo'

    mydict[letter] = dict()
    mydict[letter]['toto']  = df.toto

Результат этого дает мне:

{'A1': {'toto': 0    foo
  1    foo
  2    foo
  3    foo
  4    foo
  5    foo
  6    foo
  7    foo
  8    foo
  9    foo
  Name: toto, dtype: object}}

Вместо:

{'a': {'toto': 0    foo
  1    foo
  2    foo
  3    foo
  4    booo
  5    booo
  6    booo
  7    foo
  8    foo
  9    foo
  Name: toto, dtype: object}}

Я думал о замене if i <= 3 or i >= 7: на if 3 <= i <= 7:, но все равно получаю тот же результат. Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 08 января 2020

Как уже было сказано, df ['toto'] присваивают всему столбцу. Вам придется перебирать строки. Попробуйте это:

letter_list = ['a', 'b', 'c']

mydict = dict()

for letter in letter_list:
    df = pd.DataFrame()
    df = df.reindex(range(10))
    df['toto'] = ''

    for i in df.index:
        if i <= 3 or i >= 7:
            df['toto'][i] = 'foo'
        else:
            df['toto'][i] = 'booo'

    mydict[letter] = dict()
    mydict[letter]['toto']  = df.toto

Вывод:

{'a': {'toto': 0     foo
  1     foo
  2     foo
  3     foo
  4    booo
  5    booo
  6    booo
  7     foo
  8     foo
  9     foo
  Name: toto, dtype: object}, 'b': {'toto': 0     foo
  1     foo
  2     foo
  3     foo
  4    booo
  5    booo
  6    booo
  7     foo
  8     foo
  9     foo
  Name: toto, dtype: object}, 'c': {'toto': 0     foo
  1     foo
  2     foo
  3     foo
  4    booo
  5    booo
  6    booo
  7     foo
  8     foo
  9     foo
  Name: toto, dtype: object}}
...