Python 替换数据帧列表中的空白元素

Python 替换数据帧列表中的空白元素,python,pandas,Python,Pandas,为清晰起见,对问题进行了编辑: 我在数据框中有一列,其中每个元素都是一个列表 Index X 1 ['1','2','3'] 2 ['4','5','6'] 3 [''] 我希望它看起来如下所示: Index X 1 ['1','2','3'] 2 ['4','5','6'] 3 ['0'] 不是答案,而是: 在您的df中,我很难df.iat[0,0]=['']或df.iat[0,0]=[] pand

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

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

Index      X
  1     ['1','2','3']
  2     ['4','5','6']
  3     ['']
我希望它看起来如下所示:

Index      X
  1     ['1','2','3']
  2     ['4','5','6']
  3     ['0']
不是答案,而是:

在您的df中,我很难
df.iat[0,0]=['']
df.iat[0,0]=[]
pandas确实不鼓励您在df单元格中使用列表。

不是答案,而是:

在您的df中,我很难
df.iat[0,0]=['']
df.iat[0,0]=[]

pandas确实不鼓励您在df单元格中使用列表。

如果您只想替换
'
请尝试:

df.loc[df['X']=='', 'X'] = 0

如果只想更换
''
请尝试:

df.loc[df['X']=='', 'X'] = 0

使用嵌套列表理解将列表中的“”替换为
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      []

使用嵌套列表理解将列表中的“”替换为
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      []

您可以使用这种代码和平:

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

您可以使用这种代码和平:

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

假设您的列是对象类型,类似这样的操作应该可以:

# 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)

假设您的列是对象类型,类似这样的操作应该可以:

# 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)

df.fillna(0)
诸如此类的元素不是'nan',它们只是空白
df.replace(“,0)
那么我猜
df.fillna(0)
诸如此类的元素不是'nan',它们只是空白
df.replace(“,0)
那么我猜这列不是一个列表,我理解其中的区别。列中的每个元素都包含一个列表,其中一些列表恰好为空。如果您可以保证所有元素都是一个列表,则:
df.loc[len(df['X'])==0,'X']=0
将列表替换为0,如果您希望将列表填充为
[0]
,这是另一个问题。有几个实例中,一个元素只是一个列表,它会让我们[''']]。我想将这些列表转换为[0]。我想我们中的一些人需要重新编辑您的问题。。。它不是为澄清而编辑的,该列不是一个列表,我理解其中的区别。列中的每个元素都包含一个列表,其中一些列表恰好为空。如果您可以保证所有元素都是一个列表,则:
df.loc[len(df['X'])==0,'X']=0
将列表替换为0,如果您希望将列表填充为
[0]
,这是另一个问题。有几个实例中,一个元素只是一个列表,它会让我们[''']]。我想将这些列表转换为[0]。我想我们中的一些人需要重新编辑您的问题。。。它不是为清晰而进行的清晰编辑,对于第一个解决方案,我得到“'int'对象没有属性'loc'”,对于第二个解决方案,我得到“'int'对象不可下标”,对于第一个解决方案,我得到“'int'对象没有属性'loc'”,对于第二个解决方案,我得到“'int'对象不可下标”