Фрейм данных Python Pandas «для»

#python #pandas #dataframe #csv

Вопрос:

Я новичок в python и пандах, я пытаюсь создать маленького бота. Может быть, кто-нибудь сможет мне помочь:

у меня есть эти данные в sqlite:

 Table users
ID   name   surname    phone    timestamp
1    elon    mask      33333    2021-08-22 22:01 
2    elon    mask      33333    2021-08-22 22:02
3    elon    mask      33333    2021-08-22 22:03
4    ector   vik       44444    2021-08-22 22:01
5    ector   vik       44444    2021-08-22 22:02
............... etc.........
 

я получаю данные из бд 2 раза и:
только имя столбца по дате (чтобы 1 раз иметь только одно имя пользователя) и сохраняю в CSV

 listc = c.execute("SELECT Pair FROM users WHERE Timestamp = '" time1min "' ".format(',')) 
df_to_output = pd.DataFrame(listc)
df_to_output.to_csv("nameusers.csv", index=False)
 

теперь я получаю все данные и формирую их в фрейме данных pd (я написал, что он работает быстрее) без идентификатора столбца.

df = pd.read_sql_query(«ВЫБРАТЬ * у пользователей», con) df.drop(«ИДЕНТИФИКАТОР», ось=1, место=True)

теперь, если я повторю данные по дате и имени

     #i declare timeframe 
timenow = time.strftime('%Y-%m-%d %H:%M')
    time1min = (datetime.datetime.now()   datetime.timedelta(minutes = -1)).isoformat(timespec='minutes', sep=' ')

# i declare name to find
t1 = (df.loc[df['name'] == 'elon'])
 

все работает хорошо.

чего я не могу понять, так это как выполнить цикл, в котором я запрашиваю все данные для всех строк имени (я создаю файл nameusers.csv со списком имен). я пытался с

 ListPair=pd.read_csv("nameusers.csv")
for row in Listnames.iterrows():
     t1 = (df.loc[df['name'] == '{row}'])
 

но я получаю [] … пусто
, может быть, кто-нибудь отвезет меня.

Ответ №1:

Пожалуйста, измените код как for index, row in Listnames.iterrows(): и проверьте его еще раз.

Ответ №2:

Предполагая, что в столбце » Имя » есть какой-то столбец, nameusers.csv попробуйте что-то вроде этого:

 dfONE = pd.DataFrame({'ID': {1: 'elon', 2: 'elon', 3: 'elon', 4: 'ector', 5: 'ector'},
 'name': {1: 'mask', 2: 'mask', 3: 'mask', 4: 'vik', 5: 'vik'},
 'surname': {1: 33333, 2: 33333, 3: 33333, 4: 44444, 5: 44444},
 'phone': {1: '2021-08-22',
  2: '2021-08-22',
  3: '2021-08-22',
  4: '2021-08-22',
  5: '2021-08-22'},
 'timestamp': {1: '22:01', 2: '22:02', 3: '22:03', 4: '22:01', 5: '22:02'}})

dfTWO = pd.DataFrame({'Name': {0: 'john', 1: 'harry', 2: 'mask'}, 'Col2': {0: 'a', 1: 'b', 2: 'c'}})

print(dfONE, 'n')
print(dfTWO, 'n')
print('# Using the "Name" (captial N) from dfTWO filter the "name" (lowercase N) column in dfONE ')
print(dfONE.loc[dfONE['name'].isin(dfTWO['Name'])])
 

Выход:

       ID  name  surname       phone timestamp
1   elon  mask    33333  2021-08-22     22:01
2   elon  mask    33333  2021-08-22     22:02
3   elon  mask    33333  2021-08-22     22:03
4  ector   vik    44444  2021-08-22     22:01
5  ector   vik    44444  2021-08-22     22:02 

    Name Col2
0   john    a
1  harry    b
2   mask    c 

# Using the "Name" (captial N) from dfTWO filter the "name" (lowercase N) column in dfONE 
     ID  name  surname       phone timestamp
1  elon  mask    33333  2021-08-22     22:01
2  elon  mask    33333  2021-08-22     22:02
3  elon  mask    33333  2021-08-22     22:03