Pandas(Python):用前一行值填充空单元格?

新手上路,请多包涵

如果它们以数字开头,我想用前一行值填充空单元格。例如,我有

    Text    Text
    30      Text    Text
            Text    Text
            Text    Text
    31      Text    Text
    Text    Text
    31      Text    Text
            Text    Text
            Text    Text
    32      Text    Text
    Text    Text
            Text    Text
            Text    Text
            Text    Text
            Text    Text

然而,我想要

Text    Text
30      Text    Text
30      Text    Text
30      Text    Text
31      Text    Text
Text    Text
31      Text    Text
31      Text    Text
31      Text    Text
32      Text    Text
Text    Text
        Text    Text
        Text    Text
        Text    Text
        Text    Text

我试图通过使用此代码来达到此目的:

 data = pd.read_csv('DATA.csv',sep='\t', dtype=object, error_bad_lines=False)
data = data.fillna(method='ffill', inplace=True)
print(data)

但它没有用。

有没有办法做到这一点?

原文由 i2_ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 882
2 个回答

首先,用 NaN 替换你的空单元格:

 df[df[0]==""] = np.NaN

现在,使用 ffill()

 df.fillna(method='ffill')
#       0
#0  Text
#1    30
#2    30
#3    30
#4    31
#5  Text
#6    31
#7    31
#8    31
#9    32

原文由 DYZ 发布,翻译遵循 CC BY-SA 3.0 许可协议

我想你可以先得到 NaN 而不是 whitespaces

 df.Text = df.Text[df.Text.str.strip() != '']

print (df)
    Text Text.1
0     30   Text  Text
1    NaN   Text  Text
2    NaN   Text  Text
3     31   Text  Text
4   Text   Text   NaN
5     31   Text  Text
6    NaN   Text  Text
7    NaN   Text  Text
8     32   Text  Text
9   Text   Text   NaN
10   NaN   Text  Text
11   NaN   Text  Text
12   NaN   Text  Text
13   NaN   Text  Text

Then use ffill (same as fillna with parameter ffill ), get to_numeric for where for replace NaN if not numeric forward filling NaN , last replace NaN by empty string by fillna :

 orig = df.Text.copy()
df.Text = df.Text.ffill()
mask1 = pd.to_numeric(df.Text, errors='coerce')
df.Text = df.Text.where(mask1, orig).fillna('')
print (df)
    Text Text.1
0     30   Text  Text
1     30   Text  Text
2     30   Text  Text
3     31   Text  Text
4   Text   Text   NaN
5     31   Text  Text
6     31   Text  Text
7     31   Text  Text
8     32   Text  Text
9   Text   Text   NaN
10         Text  Text
11         Text  Text
12         Text  Text
13         Text  Text

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题