Python / Pandas: Избегать циклов, но делать запросы с условием на фрейме данных - PullRequest
0 голосов
/ 22 февраля 2020

Я начинающий с python / pandas. У меня есть набор данных, в котором у меня есть две "большие" таблицы: таблица сообщений, отправленных пользователями, и таблица пользователей с идентификатором user_id, связывающим две таблицы.

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

Мои вопросы:

  • Есть ли способ векторизации, чтобы избежать делать что-то подобное? (код может не работать, но я просто хочу рассказать вам идею l oop)
for index,user in users.iterrow():
    userMessages = df.loc[df['user_id'] == user_id]
    # do the analysis i want on the text of the user 
  • Можно ли поместить все мои данные в кадры данных, если мой Объем оперативной памяти достаточно велик, или было бы полезно использовать SQL DB?

Спасибо

В настоящее время кадры данных выглядят очень просто, поскольку я хочу проанализировать сначала текст

              user_id                                                                                                                                      text
0          1029413485                                                             text1
1           413132646                   text2
2  784769137956495360                   text3
3          3179636930                    text 4
4          1045723741                    text5


    user_id          counter1        counter2 
0  95487821              259            533                  
1  95491989             3527           2970                  
2  95498383                0              6                  
3  95500356              422           1729                  
4  95502233              276            250 

1 Ответ

0 голосов
/ 22 февраля 2020

Хорошо, мы сделаем это в несколько шагов.

Предполагая, что у нас есть такие кадры данных:

users = pd.DataFrame({
    'user_id' : [1, 2, 3, 4],
    'user_age' : [22, 23, 24, 25],
})

messages = pd.DataFrame({
    'user_id' : [1, 2, 3, 4],
    'messages' : ['message 1', 'message 2', 'message 3', 'message 4'],
})

Затем мы можем сделать это:

# Step 1) set indecies to user_id:
users = users.set_index('user_id')
messages = messages.set_index('user_id')

# Step 2) join dataframes (this will join on index):
users_messages = users.join(messages)

# Step 3) reset index on joined dataframe:
users_messages = users_messages.reset_index()

# Step 4) query for specific user:
result = users_messages.loc[users_messages.user_id == 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...