将 Pandas 数据框中的未知数字替换为以前的数字



我有一些数据帧正在尝试上传到数据库。它们是值列表,但某些列中包含字符串"null",因此这会导致错误。

所以我想使用一个函数来删除这些"空"字符串,并尝试使用替换在下面回填它们:

df.replace("null", method = bfill)

但它给了我错误消息:

ParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 2

我也尝试过输入"bfill",它只是用字符串"bfill"替换了"null"。

任何帮助表示赞赏。

谢谢。

抱歉应该提供一个例子:

1     6     11
2     7     12
null  null  null
4     9     14
5     10    15

>我认为您需要replace字符串nullNaNs,然后调用bfill(fillnamethod='bfill'(,如果数据末尾的某些NaNs添加ffill以进行正向填充:

df = df.replace("null",np.nan).bfill().ffill()

但是您的错误显然出在read_csv函数中,请检查第 4 行 - 解析器只需要一个值,并且由于某种原因有 2 个值。

示例

df = pd.DataFrame({'A':['k','null','n','null','null','m'],
'B':['t','null','null','f','null','s'],
'C':['r','t','null','s','null','null']})
print (df)
A     B     C
0     k     t     r
1  null  null     t
2     n  null  null
3  null     f     s
4  null  null  null
5     m     s  null

print (df.replace("null",np.nan))
A    B    C
0    k    t    r
1  NaN  NaN    t
2    n  NaN  NaN
3  NaN    f    s
4  NaN  NaN  NaN
5    m    s  NaN
df1 = df.replace("null",np.nan).bfill()
print (df1)
A  B    C
0  k  t    r
1  n  f    t
2  n  f    s
3  m  f    s
4  m  s  NaN
5  m  s  NaN
#if some `NaN`s in last row is necessary `ffill`
df2 = df.replace("null",np.nan).bfill().ffill()
print (df2)
A  B  C
0  k  t  r
1  n  f  t
2  n  f  s
3  m  f  s
4  m  s  s
5  m  s  s

借用@jezrael的示例数据集:

In [11]: df[df.ne('null')].bfill().ffill()
Out[11]:
A  B  C
0  k  t  r
1  n  f  t
2  n  f  s
3  m  f  s
4  m  s  s
5  m  s  s

最新更新