Fix Cell Wrap в Pandas фрейме данных - PullRequest
0 голосов
/ 05 апреля 2020

Привет Python Сообщество

Я пытаюсь обработать данные из pandas фрейма данных, который включает перенос ячеек, как показано ниже.

Обратите внимание, что фамилии заключены в строку ниже.

Я попытался перебрать кадр данных, используя:

for row in df.itertuples(index=True):

и обновив ячейку, используя:

df.Last[ii-1] = updateCell

и удалив старую строку, используя:

df.drop([df.index[ii]],inplace=True)

Но я столкнулся с такими предупреждениями: A value is trying to be set on a copy of a slice from a DataFrame

и другими проблемами с индексами после удаления.

Как лучше всего решить эту проблему?

Барри

import numpy as np

# initialize list of lists 
data = [['Barney', 'Rubble', 25],
        ['Fred','Flintstone', 25], 
        ['Wilma','Slaghoople ',22],
        [ np.nan,'Flintstone', np.nan], 
        [ 'Betty', 'McBricker', 21],
        [ np.nan, 'Rubble', np.nan]]

# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['First', 'Last', 'Age']) ```


1 Ответ

0 голосов
/ 05 апреля 2020

df.Last[ii-1] = updateCell использует логическое индексирование для фрейма данных, который создает копию среза (подробнее см. https://pandas.pydata.org/pandas-docs/version/0.25.0/user_guide/indexing.html#indexing -view-vers--copy ). Чтобы установить значение напрямую, используйте df.loc[ii-1, 'Last'] = updateCell.

В качестве отступления, циклически перебирая фрейм данных и пытаясь удалить строки на месте, вероятно, не лучший вариант. Отправной точкой для использования pandas является что-то вроде этого. , ,

cols = ['First', 'Last', 'Age']
df = pd.DataFrame(data, columns=cols)
for col in cols:
    prevcol = f'{col}_prev'
    df[prevcol] = f[col].shift(1)
    df[col] = df[col].fillna(df[prevcol])
>>>df
    First         Last   Age First_prev    Last_prev  Age_prev
0  Barney       Rubble  25.0        NaN          NaN       NaN
1    Fred   Flintstone  25.0     Barney       Rubble      25.0
2   Wilma  Slaghoople   22.0       Fred   Flintstone      25.0
3   Wilma    Flintsone  22.0      Wilma  Slaghoople       22.0
4   Betty    McBricker  21.0        NaN    Flintsone       NaN
5   Betty       Rubble  21.0      Betty    McBricker      21.0

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

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