熊猫(Python):用前一行值填充空单元格?
Posted
技术标签:
【中文标题】熊猫(Python):用前一行值填充空单元格?【英文标题】:Pandas(Python) : Fill empty cells with with previous row value? 【发布时间】:2017-05-03 21:30:00 【问题描述】:如果它们以数字开头,我想用前一行值填充空单元格。例如,我有
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)
但它不起作用。
有没有办法做到这一点?
【问题讨论】:
“空”单元格的值是多少?fillna
仅填充值为NaN
的单元格。要使用fillna
,首先将“”替换为numpy.nan
。
谢谢。我用正则表达式将“空”值更改为 NaN。但它没有用。
【参考方案1】:
首先,将空单元格替换为 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
【讨论】:
它是否适用于字符串值?因为我试图用字符串的前一行值填充我的空单元格,它仍然返回NaN
。
df[df["column_name"]==""] = np.NaN 是否正确?
不确定这是否可行,因为我正在处理类似的问题。 ffill 会填满一切。
@joasa 设置标志“就地”允许我对字符串值执行相同的操作。示例:frame[column_name].fillna(method='ffill', inplace=True)
我认为第一行应该是np.nan
rathar 而不是np.NaN
。出于某种原因,我的代码将np.Nan
视为字符串,将np.nan
视为真正的nan。【参考方案2】:
我想你可以先得到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
然后使用ffill
(与fillna
同参数ffill
),得到to_numeric
为where
替换NaN
如果不是数字前向填充NaN
,最后用空替换NaN
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
【讨论】:
非常感谢。但是,当我运行您的代码时,我得到以下信息:第 2672 行,在 getattr return object.__getattribute__(self, name) AttributeError: 'DataFrame' object has no attribute 'Text' 我不明白 .Text 是什么方法。 (我写了 Text 但实际上有一些字符串值)。 文本为列名,请尝试使用df.col1
或df['col 1']
。以上是关于熊猫(Python):用前一行值填充空单元格?的主要内容,如果未能解决你的问题,请参考以下文章