Python:如何找到列中的哪些值在另一个特定列(dataframes)中具有NaN值
假设我们的df1如下所示:Python:如何找到列中的哪些值在另一个特定列(dataframes)中具有NaN值,python,pandas,dataframe,multiple-columns,nan,Python,Pandas,Dataframe,Multiple Columns,Nan,假设我们的df1如下所示: x1 = [{'partner': "Afghanistan", 'commodity': NaN}, {'partner': "Zambia", 'commodity': 2}, {'partner': "Germany", 'commodity': 2}, {'partner': "Afghanistan", 'commodity': NaN}, {'partner': "Canada",
x1 = [{'partner': "Afghanistan", 'commodity': NaN},
{'partner': "Zambia", 'commodity': 2},
{'partner': "Germany", 'commodity': 2},
{'partner': "Afghanistan", 'commodity': NaN},
{'partner': "Canada", 'commodity': NaN},
{'partner': "Italy", 'commodity': 3},
{'partner': "Canada", 'commodity': NaN},
{'partner': "USA", 'commodity': NaN}]
df1 = pd.DataFrame(x1)
commodity_nan_partners=
Afghanistan
Canada
USA
我想做的是查看partner中的值列表,这些值在商品中具有NaN值,但我不想让同一个partner列出两次
因此,我的首选结果如下所示:
x1 = [{'partner': "Afghanistan", 'commodity': NaN},
{'partner': "Zambia", 'commodity': 2},
{'partner': "Germany", 'commodity': 2},
{'partner': "Afghanistan", 'commodity': NaN},
{'partner': "Canada", 'commodity': NaN},
{'partner': "Italy", 'commodity': 3},
{'partner': "Canada", 'commodity': NaN},
{'partner': "USA", 'commodity': NaN}]
df1 = pd.DataFrame(x1)
commodity_nan_partners=
Afghanistan
Canada
USA
而不是:
Afghanistan
Afghanistan
Canada
Canada
USA
您可以使用isnull查找NaN值,然后使用unique或set获取唯一值:
您可以使用isnull查找NaN值,然后使用unique或set获取唯一值:
+ +
您可以筛选序列,然后删除重复项:
res = df1.loc[df1['commodity'].isnull(), 'partner'].drop_duplicates()
print(res)
0 Afghanistan
4 Canada
7 USA
Name: partner, dtype: object
+ +
您可以筛选序列,然后删除重复项:
res = df1.loc[df1['commodity'].isnull(), 'partner'].drop_duplicates()
print(res)
0 Afghanistan
4 Canada
7 USA
Name: partner, dtype: object
第一步
过滤掉以仅保留有效字符串:
v = df1.loc[df1.commodity.isna(), 'partner']
或者
步骤2
删除重复项
如果你想收藏
ingredients.unique()
array(['Afghanistan', 'Canada', 'USA'], dtype=object)
或者
如果你想拍连续剧
ser = ingredients.drop_duplicates().reset_index(drop=True)
0 Afghanistan
1 Canada
2 USA
Name: partner, dtype: object
如果你想要一个数据帧
df = ser.to_frame()
第一步
过滤掉以仅保留有效字符串:
v = df1.loc[df1.commodity.isna(), 'partner']
或者
步骤2
删除重复项
如果你想收藏
ingredients.unique()
array(['Afghanistan', 'Canada', 'USA'], dtype=object)
或者
如果你想拍连续剧
ser = ingredients.drop_duplicates().reset_index(drop=True)
0 Afghanistan
1 Canada
2 USA
Name: partner, dtype: object
如果你想要一个数据帧
df = ser.to_frame()
请咨询dropna,在这里提供一个不同的想法
set(df1.partner.tolist())-set(df1.dropna().partner.tolist())
Out[94]: {'Afghanistan', 'Canada', 'USA'}
请咨询dropna,在这里提供一个不同的想法
set(df1.partner.tolist())-set(df1.dropna().partner.tolist())
Out[94]: {'Afghanistan', 'Canada', 'USA'}
只是另一种选择:
>>> df1[df1.isnull().any(axis=1)]['partner'].drop_duplicates()
0 Afghanistan
4 Canada
7 USA
Name: partner, dtype: object
使用loc+np.isnan
只是另一种选择:
>>> df1[df1.isnull().any(axis=1)]['partner'].drop_duplicates()
0 Afghanistan
4 Canada
7 USA
Name: partner, dtype: object
使用loc+np.isnan