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

#python-3.x #pandas #list #function

#python-3.x #pandas #Список #функция

Вопрос:

Я пытаюсь создать таблицу из списка данных, используя pandas.

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

Это работает до тех пор, пока не начнется добавление строк. Заголовки столбцов добавляются, но данные — нет. Он либо сохраняет значение только в последнем столбце, либо ничего не добавляет.

Мой scrath был:

 for title in titles:
   for x in data:
      table = {
        title: data[x]
}
df.DataFrame(table, columns=titles, index[0]
  

список столбцов:

 titles = ['timestamp', 'source', 'tracepoint']
  

список данных:

 data = ['first', 'second', 'third',
        'first', 'second', 'third',
        'first', 'second', 'third']
  

Как я могу сделать что-то подобное?

 timestamp, source, tracepoint
first, second, third
first, second, third
first, second, third
  

Комментарии:

1. Вместо цикла я предлагаю вам использовать numpy и изменять данные с помощью функции reshape . Тогда вам не понадобится цикл, вы просто поместите сформированный массив и сможете поместить его в pd.DataFrame со столбцами

2. pd.DataFrame([data[i:i 3] for i in range(0,len(data), 3)], columns=titles) ?

Ответ №1:

Если вы просто хотите инициализировать фрейм данных pandas, вы можете использовать конструктор dataframe. И вы также можете добавить строку с помощью dict . Pandas предоставляет другие полезные функции, такие как объединение между фреймами данных, вставка / удаление столбцов. Если вам нужно, пожалуйста, проверьте документ pandas.

 import pandas as pd

# initialization by dataframe’s constructor
titles = ['timestamp', 'source', 'tracepoint']
data = [['first', 'second', 'third'],
        ['first', 'second', 'third'],
        ['first', 'second', 'third']]
df = pd.DataFrame(data, columns=titles)
print('---initialization---')
print(df)

# append row
new_row = {
    'timestamp': '2020/11/01',
    'source': 'xxx',
    'tracepoint': 'yyy'
}
df = df.append(new_row, ignore_index=True)
print('---append result---')
print(df)
  

вывод

 ---initialization---
  timestamp  source tracepoint
0     first  second      third
1     first  second      third
2     first  second      third
---append result---
    timestamp  source tracepoint
0       first  second      third
1       first  second      third
2       first  second      third
3  2020/11/01     xxx        yyy