Pandas 存在字符串时,dataframe 报告没有匹配的字符串
Pandas dataframe reports no matching string when the string is present
python 相当陌生。这似乎是一个非常简单的问题,但我找不到有关它的任何信息。
我有一个字符串列表,对于每个字符串,我想检查它是否存在于数据帧中(实际上是在数据帧的特定列中。不是是否存在子字符串,而是整个字符串。
所以我的数据框如下所示:
A=pd.DataFrame(["ancestry","time","history"])
我应该能够简单地使用“数据框中的字符串”方法,如
"time" in A
这个returns不过是假的。
如果我运行
"time" == A.iloc[1]
它 returns “正确”,但作为系列的一部分很烦人,这取决于知道相应字符串在数据帧中的位置。
有什么方法可以只使用 df 方法中的字符串,轻松找出列表中的字符串是否在数据框中?
处理这个问题的方法是将整个数据帧与 "time"
进行比较。这将 return 一个掩码,其中 DF 的每个值如果是 time
则为 True,否则为 False。然后,您可以使用 .any()
检查是否有任何 True 值:
>>> A = pd.DataFrame(["ancestry","time","history"])
>>> A
0
0 ancestry
1 time
2 history
>>> A == "time" # or A.eq("time")
0
0 False
1 True
2 False
>>> (A == "time").any()
0 True
dtype: bool
注意上面的输出,(A == "time").any()
return 是一个系列,其中每个条目都是一列,并且该列是否包含 time
。如果你想检查整个数据框(跨所有列),调用.any()
两次:
>>> (A == "time").any().any()
True
我相信(myseries==mystr).any()
会按照您的要求去做。 DataFrames 的特殊 __contains__
方法(通知 in
的行为)检查您的字符串是否是 DataFrame 的列,例如
>>> A = pd.DataFrame({"c": [0,1,2], "d": [3,4,5]})
>>> 'c' in A
True
>>> 0 in A
False
最后加上.to_numpy()
:
'time' in A.to_numpy()
如您所见,x in pandas.DataFrame
语法不会产生您想要的结果。但是 .to_numpy()
将数据帧转换为 Numpy 数组,并且 x in numpy.array
如您所愿。
我会稍微修改您的数据框并使用 .str.contains 检查字符串在您的系列中的位置。
df=pd.DataFrame()
df['A']=pd.Series(["ancestry","time","history"])
df['A'].str.contains("time")
python 相当陌生。这似乎是一个非常简单的问题,但我找不到有关它的任何信息。 我有一个字符串列表,对于每个字符串,我想检查它是否存在于数据帧中(实际上是在数据帧的特定列中。不是是否存在子字符串,而是整个字符串。
所以我的数据框如下所示:
A=pd.DataFrame(["ancestry","time","history"])
我应该能够简单地使用“数据框中的字符串”方法,如
"time" in A
这个returns不过是假的。 如果我运行
"time" == A.iloc[1]
它 returns “正确”,但作为系列的一部分很烦人,这取决于知道相应字符串在数据帧中的位置。 有什么方法可以只使用 df 方法中的字符串,轻松找出列表中的字符串是否在数据框中?
处理这个问题的方法是将整个数据帧与 "time"
进行比较。这将 return 一个掩码,其中 DF 的每个值如果是 time
则为 True,否则为 False。然后,您可以使用 .any()
检查是否有任何 True 值:
>>> A = pd.DataFrame(["ancestry","time","history"])
>>> A
0
0 ancestry
1 time
2 history
>>> A == "time" # or A.eq("time")
0
0 False
1 True
2 False
>>> (A == "time").any()
0 True
dtype: bool
注意上面的输出,(A == "time").any()
return 是一个系列,其中每个条目都是一列,并且该列是否包含 time
。如果你想检查整个数据框(跨所有列),调用.any()
两次:
>>> (A == "time").any().any()
True
我相信(myseries==mystr).any()
会按照您的要求去做。 DataFrames 的特殊 __contains__
方法(通知 in
的行为)检查您的字符串是否是 DataFrame 的列,例如
>>> A = pd.DataFrame({"c": [0,1,2], "d": [3,4,5]})
>>> 'c' in A
True
>>> 0 in A
False
最后加上.to_numpy()
:
'time' in A.to_numpy()
如您所见,x in pandas.DataFrame
语法不会产生您想要的结果。但是 .to_numpy()
将数据帧转换为 Numpy 数组,并且 x in numpy.array
如您所愿。
我会稍微修改您的数据框并使用 .str.contains 检查字符串在您的系列中的位置。
df=pd.DataFrame()
df['A']=pd.Series(["ancestry","time","history"])
df['A'].str.contains("time")