在熊猫数据框中修复单元格换行

问题描述 投票:-1回答:1

Hello 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

以及删除后索引的其他问题。

解决此问题的最佳方法是什么?

Barry

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']) ```


python pandas dataframe
1个回答
0
投票

df.Last[ii-1] = updateCell在数据帧上使用布尔索引,这会创建切片的副本(有关更多详细信息,请参见https://pandas.pydata.org/pandas-docs/version/0.25.0/user_guide/indexing.html#indexing-view-versus-copy)。要直接设置值,请使用df.loc[ii-1, 'Last'] = updateCell

此外,遍历数据框并尝试就地删除行可能不是您的最佳选择。使用熊猫的起点是这样的。 。 。

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

如果您不打算使用向量化操作,那么我将在列表列表中进行操作,然后根据需要从最终产品中创建一个数据框。

© www.soinside.com 2019 - 2024. All rights reserved.