Select Pandas DataFrame 中的所有行,通过传入字符串或其他对象来定位
Select all rows in a Pandas DataFrame with loc by passing in a string or other object
我正在编写一个函数,该函数 select 是 pandas DataFrame 中行的子集。
函数看起来像这样,
def get_predictions(df: pd.DataFrame, subset: str) -> pd.DataFrame:
return df['properties', 'prediction'].loc[subset]
我希望此函数能够处理我想要 select DataFrame 中所有行的情况。一种解决方案是将子集参数默认设置为 None,如果子集参数设置为 None.
,则将整个 DataFrame 设置为 return
def get_predictions(df: pd.DataFrame, subset: str) -> pd.DataFrame:
if subset is None:
return df['properties', 'prediction']
else:
return df['properties', 'prediction'].loc[subset]
我不喜欢这个解决方案,因为我重复了很多代码。有没有更好的解决方案,不涉及重复。具体来说,是否有一个我可以传递给 .loc[]
的对象,它会 return DataFrame 中的所有行?
这是我正在寻找的理想解决方案,
def get_predictions(df: pd.DataFrame, subset=MysteryObject) -> pd.DataFrame:
return df['properties', 'prediction'].loc[MysteryObject]
是否有 MysteryObject
可以实现这种期望的行为?
直接传入
subset = df.index
此外,最好使用 .loc 对行和列进行子集化。这样,您就可以查看子集,而不是先生成列的副本。
就这样吧
df.loc[subset, ['properties', 'prediction']]
让我们尝试将默认值设置为 slice(None)
而不是 None
:
def get_predictions(
df: pd.DataFrame, subset: str = slice(None)
) -> pd.DataFrame:
return df[['properties', 'prediction']].loc[subset]
尽管在一步中对两个轴进行子集化会更好:
def get_predictions(
df: pd.DataFrame, subset: str = slice(None)
) -> pd.DataFrame:
return df.loc[subset, ['properties', 'prediction']]
slice(None)
等同于 :
,只是它可以赋值给一个变量。
df.loc[:, 'col'] == df.loc[slice(None), 'col']
测试代码:
test_df = pd.DataFrame({'properties': [1, 2, 3],
'prediction': [4, 5, 6],
'other': [7, 8, 9]},
index=['a', 'b', 'c'])
print('Subset \'a\'')
print(get_predictions(test_df, 'a'))
print('No Subset')
print(get_predictions(test_df))
输出:
Subset 'a'
properties 1
prediction 4
Name: a, dtype: int64
No Subset
properties prediction
a 1 4
b 2 5
c 3 6
我正在编写一个函数,该函数 select 是 pandas DataFrame 中行的子集。
函数看起来像这样,
def get_predictions(df: pd.DataFrame, subset: str) -> pd.DataFrame:
return df['properties', 'prediction'].loc[subset]
我希望此函数能够处理我想要 select DataFrame 中所有行的情况。一种解决方案是将子集参数默认设置为 None,如果子集参数设置为 None.
,则将整个 DataFrame 设置为 returndef get_predictions(df: pd.DataFrame, subset: str) -> pd.DataFrame:
if subset is None:
return df['properties', 'prediction']
else:
return df['properties', 'prediction'].loc[subset]
我不喜欢这个解决方案,因为我重复了很多代码。有没有更好的解决方案,不涉及重复。具体来说,是否有一个我可以传递给 .loc[]
的对象,它会 return DataFrame 中的所有行?
这是我正在寻找的理想解决方案,
def get_predictions(df: pd.DataFrame, subset=MysteryObject) -> pd.DataFrame:
return df['properties', 'prediction'].loc[MysteryObject]
是否有 MysteryObject
可以实现这种期望的行为?
直接传入
subset = df.index
此外,最好使用 .loc 对行和列进行子集化。这样,您就可以查看子集,而不是先生成列的副本。 就这样吧
df.loc[subset, ['properties', 'prediction']]
让我们尝试将默认值设置为 slice(None)
而不是 None
:
def get_predictions(
df: pd.DataFrame, subset: str = slice(None)
) -> pd.DataFrame:
return df[['properties', 'prediction']].loc[subset]
尽管在一步中对两个轴进行子集化会更好:
def get_predictions(
df: pd.DataFrame, subset: str = slice(None)
) -> pd.DataFrame:
return df.loc[subset, ['properties', 'prediction']]
slice(None)
等同于 :
,只是它可以赋值给一个变量。
df.loc[:, 'col'] == df.loc[slice(None), 'col']
测试代码:
test_df = pd.DataFrame({'properties': [1, 2, 3],
'prediction': [4, 5, 6],
'other': [7, 8, 9]},
index=['a', 'b', 'c'])
print('Subset \'a\'')
print(get_predictions(test_df, 'a'))
print('No Subset')
print(get_predictions(test_df))
输出:
Subset 'a'
properties 1
prediction 4
Name: a, dtype: int64
No Subset
properties prediction
a 1 4
b 2 5
c 3 6