DataPrame Python Pandas - перебор строк и добавление словаря - PullRequest
0 голосов
/ 22 марта 2019
import pandas as pd

d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)

def calculation(text):
    return text*2

for idx, row in df.iterrows():
    df.at[idx, 'col3'] = dict(cats=calculation(row['col1']))


df

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

В основном я пытаюсь получить словарь в col3.

Однако, когдавы впервые запускаете новый фрейм данных - вы получаете

    col1    col2    col3
0    1        3     cats
1    2        4     {'cats': 4}

Если вы снова запускаете цикл for для того же фрейма данных, вы получаете то, что я ищу, это

    col1    col2    col3
0    1       3      {'cats': 2}
1    2       4      {'cats': 4}

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

Я пробовал другие способы, такие как df.loc и другие, но до сих пор не радуюсь.

1 Ответ

0 голосов
/ 22 марта 2019

Старайтесь держаться подальше от df.iterrows().

Вместо него можно использовать df.apply:

import pandas as pd

d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)

def calculation(text):
    return text*2

def calc_dict(row):
    return dict(cats=calculation(row['col1']))

df['col3'] = df.apply(calc_dict, axis=1)


df

, который выводит ожидаемый результат.

ОшибкаКажется, что это закрадывается с созданием и назначением типа данных объекта для col col3.Я попытался предварительно выделить NaN с помощью df['col3'] = pd.np.NaN, который не дал эффекта (проверьте с помощью print(df.dtypes)).В любом случае, это похоже на ошибочное поведение.Вместо этого используйте df.apply, это быстрее и менее подвержено этим типам проблем.

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