我相信有一种明显的方法可以做到这一点,但现在想不出什么巧妙的方法。
基本上,我想要得到True
或False
来判断一个值是否存在于pandas df
索引中,而不是引发异常。
import pandas as pd
df = pd.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d'])
df.loc['g'] # (should give False)
我现在正在使用的是以下内容
sum(df.index == 'g')
我相信有一种明显的方法可以做到这一点,但现在想不出什么巧妙的方法。
基本上,我想要得到True
或False
来判断一个值是否存在于pandas df
索引中,而不是引发异常。
import pandas as pd
df = pd.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d'])
df.loc['g'] # (should give False)
我现在正在使用的是以下内容
sum(df.index == 'g')
这应该可以解决问题
'g' in df.index
n
,则可以检查任意长度为1..n
的元组。 - Minh Triet'g' in df.columns
。例如:df = pandas.DataFrame({'test':[1,2,3,4]}, columns=['a','b','c','d'])
。请注意,翻译过程中不会添加解释或其他内容,并且保持原文意思不变。 - Tahlor多重索引和单一索引有些不同。下面是一些适用于多重索引数据框的方法。
df = pd.DataFrame({'col1': ['a', 'b','c', 'd'], 'col2': ['X','X','Y', 'Y'], 'col3': [1, 2, 3, 4]}, columns=['col1', 'col2', 'col3'])
df = df.set_index(['col1', 'col2'])
in df.index
仅在检查单个索引值时对第一级有效。
'a' in df.index # True
'X' in df.index # False
检查 df.index.levels
是否存在其他级别。
'a' in df.index.levels[0] # True
'X' in df.index.levels[1] # True
在 df.index
中查找索引组合元组。
('a', 'X') in df.index # True
('a', 'Y') in df.index # False
仅供参考,因为这是我正在寻找的内容,您可以通过追加".values"方法来测试值或索引中的存在性,例如:
g in df.<your selected field>.values
g in df.index.values
我发现加上".values"将数据转化为简单的列表或者ndarray,使存在性检查和其他Python工具的运行更加顺畅。只是想为大家提供这个提示。
in g in df.index
返回 true,而 in g in df.index.values
返回 false。有趣。 - watsonicdata = [{'a': random.random(), 'b': random.randint(0, 10), 'c': i} for i in range(10000)]
data2 = [{'a': random.random(), 'b': random.randint(0, 10), 'c': i} for i in range(100)]
df1 = pd.DataFrame.from_records(data)
df2 = pd.DataFrame.from_records(data2)
timeit 99999 in df2.index # 442ns
timeit 99999 in df1.index # 476ns
timeit 99999 in df2.index.values # 3310ns
timeit 99999 in df1.index.values # 63900ns
- G.Sdf3 = df1[df1.index.isin(df2.index)]
或者在 df2 中没有 df1 的索引...
df3 = df1[~df1.index.isin(df2.index)]
>>> df_data
id name value
0 a ampha 1
1 b beta 2
2 c ce 3
我尝试了:
>>> getattr(df_data, 'value').isin([1]).any()
True
>>> getattr(df_data, 'value').isin(['1']).any()
True
but:
>>> 1 in getattr(df_data, 'value')
True
>>> '1' in getattr(df_data, 'value')
False
isin
不会检查数据类型。尝试使用 df['value'].isin([True]).any()
,它也会返回 True,因为它与 1
匹配。True -> 1
。 - Mohamed Thasin ahdf = pandas.DataFrame({'g':[1]}, index=['isStop'])
#df.loc['g']
if 'g' in df.index:
print("find g")
if 'isStop' in df.index:
print("find a")
我喜欢使用:
if 'value' in df.index.get_level_values(0):
print(True)
get_level_values 方法非常好用,因为它允许您获取索引中的值,无论您的索引是简单的还是复合的。
如果您的数据框只有一个索引[或者您想要检查多个索引级别中的第一个索引],请使用0(零)。使用1表示第二个索引,以此类推...