我有一些数据帧正在尝试上传到数据库。它们是值列表,但某些列中包含字符串"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
字符串null
NaN
s,然后调用bfill
(fillna
method='bfill'
(,如果数据末尾的某些NaN
s添加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