为清楚起见,对问题进行了编辑:
我在pandas数据框中有一个列,其中每个元素都是一个列表
Index X
1 ['1','2','3']
2 ['4','5','6']
3 ['']
我希望它看起来像这样:
Index X
1 ['1','2','3']
2 ['4','5','6']
3 ['0']
答案 0 :(得分:2)
假设您的列是对象类型,则应该可以执行以下操作:
# Example of dataframe
df = pd.DataFrame({'col_1': [1,2,3], 'col_2' : [[1,2,3,4],[''],['']]})
col_1 col_2
0 1 [1, 2, 3, 4]
1 2 []
2 3 []
使用pandas.apply应该可以解决问题
df["col_2"].apply(lambda x : ['0'] if x==[''] else x)
答案 1 :(得分:1)
不是答案,但是:
在您的df中,我很难去df.iat[0, 0]=['']
或df.iat[0, 0]=[]
熊猫真的不鼓励您使用df单元内的列表。
答案 2 :(得分:1)
如果您只想更换' '
,请尝试:
df.loc[df['X']=='', 'X'] = 0
答案 3 :(得分:1)
使用嵌套列表推导将列表中的''替换为0
:
df = pd.DataFrame({'X':[[''], ['a',''], []]})
df['X'] = [[0 if y =='' else y for y in x] for x in df['X']]
print (df)
X
0 [0]
1 [a, 0]
2 []
答案 4 :(得分:1)
您可以使用以下安全代码:
df = pd.DataFrame({"X":[["a"], ["b"], [""], []]})
df.head()
X
0 [a]
1 [b]
2 []
3 []
def replace_empty(X):
for n, i in enumerate(X):
if i == '':
X[n] = 0
return X
df.X = df.X.apply(lambda x: replace_empty(x))
df.head()
X
0 [a]
1 [b]
2 [0]
3 []