首页 > 解决方案 > 如何从传递给python数据框的列表中删除空白和空值

问题描述

我有如下数据框列。

df['lane']
AZ
NL

NaN
BL
AZ

我的代码

unique_lane = df['lane'].unique()
unique_lane = pd.DataFrame( list(zip(unique_lane)), columns =['unique_lane'])
t = ', '.join(unique_lane['unique_lane'].astype(str))

当我传递唯一列表值时,应从列表中删除空白('')或 Null 值。创建的列表不应包含空白或 Null 值。

bigdata_null_zones = bigdata_null_zones[~bigdata_null_zones["lane"].isin([t])]

这怎么能在python中完成?

标签: pythonpython-3.xpandasdataframe

解决方案


来自问题的测试 DataFrame 的示例数据:

df = pd.DataFrame({'lane':['AZ','NL','', np.nan, 'BL','AZ']})

测试是否仅通过错误值或空字符串:

df = pd.DataFrame({'lane':['', np.nan]})
print (df)
  lane
0     
1  NaN

bigdata_null_zones = pd.DataFrame({'lane':['AZ','NL','AB', 'BL','AZ']})
print (bigdata_null_zones)
  lane
0   AZ
1   NL
2   AB
3   BL
4   AZ

删除后它变空Series

t = df['lane'].replace('',np.nan).dropna()
print (t)
Series([], Name: lane, dtype: float64)

所以如果通过得到相同的值,因为没有过滤:

bigdata_null_zones[bigdata_null_zones["lane"].isin(t)]
print (bigdata_null_zones)
  lane
0   AZ
1   NL
2   AB
3   BL
4   AZ

如果相同的数据框:

df = pd.DataFrame({'lane':['AZ','NL','', np.nan, 'BL','AZ'],
                   'col':range(6)})

print (df)
  lane  col
0   AZ    0
1   NL    1
2         2
3  NaN    3
4   BL    4
5   AZ    5

df1 = df.assign(lane= df['lane'].replace('',np.nan)).dropna(subset=['lane'])
print (df1)
  lane  col
0   AZ    0
1   NL    1
4   BL    4
5   AZ    5

推荐阅读