替换熊猫数据框列表中的空白元素

时间:2019-04-26 12:55:10

标签: python pandas

为清楚起见,对问题进行了编辑:

我在pandas数据框中有一个列,其中每个元素都是一个列表

Index      X
  1     ['1','2','3']
  2     ['4','5','6']
  3     ['']

我希望它看起来像这样:

Index      X
  1     ['1','2','3']
  2     ['4','5','6']
  3     ['0']

5 个答案:

答案 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   []