Как передать и отредактировать фрейм данных в качестве аргумента в Pandas - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь разбить массив в столбце фрейма данных и добавить отдельные записи в новый фрейм данных.

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

Могу ли я даже редактировать фрейм данных из функции?

import pandas as pd

# Original data frame
series1 = pd.Series([['cat', 'dog', 'rabbit'], ['frog', 'moose', 'fly']])
oldDF = pd.DataFrame(series1)

# New data frame where I want to populate all values in the old
series2 = pd.Series([])
newDF = pd.DataFrame(series2)

# Define function to iterate over each array 
def appendItems(x, df):
  for item in x:
    for i in item: 
      # Trying to append entries to new dataframe
      df.append(pd.Series([i]), ignore_index=True)
      print(pd.Series([i]))

# Apply above function to dataframe
oldDF.apply(appendItems,args=[newDF])

# Result-> empty data frame :-(
print("Checking result")
newDF.head()

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Проблема, с которой вы сталкиваетесь при использовании функции appendItems, заключается в том, что она использует df.append(), которая создает копию и не изменяется на месте. df.append() использует pd.concat() под капотом. если вы действительно хотите использовать функцию appendItems, вы должны использовать df.loc[] для непосредственного изменения df, а не для копирования. Вот пример:

def appendItems(x, df):
    for i, item in enumerate(pd.np.hstack(x.values.tolist())):
        df.loc[i, 0] = item

(np.hstack используется только для выравнивания вложенного списка значений)

Ссылки по теме: pd.DataFrame.append

pd.concat

np.hstack

0 голосов
/ 31 августа 2018

Вы можете попробовать использовать numpy.concatenate

import numpy as np

pd.DataFrame(np.concatenate(oldDF[0]))

[выход]

        0
0     cat
1     dog
2  rabbit
3    frog
4   moose
5     fly    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...