【发布时间】:2018-11-30 15:53:46
【问题描述】:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [[1, 2, 3, 4], [4, 5, 6, 7, 8], [7, 6, 4], np.nan, [1, 2]],
'B': [[1, 2, 3, 4], [4, 5, 6, 7, 8], [3, 7, 9], np.nan, [4, 5]],
'E': [np.nan, np.nan, np.nan, np.nan, np.nan],
'F': [[2, 2], [4, 4], np.nan, [78, 90], np.nan]
})
# First try
# ERROR: Cannot do inplace boolean setting on mixed-types with a non np.nan value
# df[df.isnull()] = df[df.isnull()].applymap(lambda x: [''])
# Second try
# ERROR: Invalid "to_replace" type: 'float'
# df.replace(to_replace=np.nan, value=[''], inplace=True)
# Third try
# RESULT: The column 'E' dissapears and the rest of NaN values are converted to None
# stack = df.stack()
# stack[stack.isnull()] = [''] # or stack[stack == np.nan] = ['']
# stack.unstack()
# Fourth try
# ERROR: "value" parameter must be a scalar or dict, but you passed a "list"
# df.fillna([''])
这是我的预期结果:
df = pd.DataFrame({
'A': [[1, 2, 3, 4], [4, 5, 6, 7, 8], [7, 6, 4], [''], [1, 2]],
'B': [[1, 2, 3, 4], [4, 5, 6, 7, 8], [3, 7, 9], [''], [4, 5]],
'E': [[''], [''], [''], [''], ['']],
'F': [[2, 2], [4, 4], [''], [78, 90], ['']]
})
我已经尝试了示例中显示的所有方法,但没有结果。如何做到这一点?
注意:我想指出,替换是一个只有一个元素的列表,一个空字符串。也可以是[np.nan]
【问题讨论】:
-
旁注:您确定要在
F中输入一个空字符串,这似乎是一个数字列吗?添加字符串会将整个系列变成objectdtype,既昂贵又低效。 -
@jpp 实际上都是列表,我想用一个元素的列表替换 NaN 值,一个空字符串。我已经更新了我的问题。看一下,谢谢
-
这让我的观点更加重要:)
标签: python python-3.x pandas dataframe nan