i2_*_*i2_ 7 python python-3.x pandas
如果以数字开头,我想用前一行值填充空单元格.例如,我有
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
Run Code Online (Sandbox Code Playgroud)
但是,我希望拥有
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
Run Code Online (Sandbox Code Playgroud)
我试图通过使用此代码达到此目的:
data = pd.read_csv('DATA.csv',sep='\t', dtype=object, error_bad_lines=False)
data = data.fillna(method='ffill', inplace=True)
print(data)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
反正有没有这样做?
DYZ*_*DYZ 21
首先,用NaN替换空单元:
df[df[0]==""] = np.NaN
Run Code Online (Sandbox Code Playgroud)
现在,使用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
Run Code Online (Sandbox Code Playgroud)
我觉得你可以先得到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
Run Code Online (Sandbox Code Playgroud)
然后用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12972 次 |
| 最近记录: |