在Pandas中搜索字符串的精确匹配项,DataFrame

gxwragnw  于 2023-03-06  发布在  其他
关注(0)|答案(3)|浏览(194)

我有一个DataFrame,如下所示:

data = [
    ['2022-12-04 00:00:00', 5000.00],
    ['2022-12-04 00:00:00', 6799.50],
    ['2022-12-04 00:00:00', 5000.00],
    ['2023-01-10 00:00:00', 5000.00]
]

df = pd.DataFrame(data, columns=['Date', 'Float'])

date_input = "2022-12-04 00:00:00"
float_input = "5000.00"

检查DF中是否存在与值“date”和“float”精确匹配的字符串的最佳方法是什么?
在这种情况下,我希望得到"Yes“输出,因为DataFrame的第一行包含了”date“和”float“的组合。
我尝试了这样的方法,但它无助于确定某个“date_input”日期是否存在“float_input”值的匹配

if ((df['Date'] == pd.Timestamp(date_input)).any()) and (df['Float'] == float(float_input).any():
print('YES')
else:
print("No")
xt0899hw

xt0899hw1#

晚安,朋友,我执行了你尝试过的过程。首先,让我们来分解一下:
第一步:

您的数据集具有不正确的值,您必须将日期更正为字符串,然后才能将其放入pd.DataFrame。

data = [
['2022-12-04 00:00:00', 5000.00],
['2022-12-04 00:00:00', 6799.50],
['2022-12-04 00:00:00', 5000.00],
['2023-01-10 00:00:00', 5000.00]]

第二步:
在解决了前面的问题之后,我们执行dateframe过程:

现在我们可以可视化dateframe,紧接着我们看到我们要查找的列之一有类型问题,因此我们必须执行转换
第三步:

使用一个panda工具,我们可以将类型转换为datetime,你可以看到我使用了dayfirst参数,这是可选的,但是因为我们没有小时,分钟和秒,我没有选择telos,我参考了文档,你会觉得很有趣。

df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)

第四步:
让我们以简单的方式转到咨询,按部分执行咨询,一次查找一个。我们找到了您的值查询

SearchDate =  df[df['Date'] == pd.Timestamp("2022-12-04 00:00:00'")]
SearchNumber =  SearchDate[SearchDate['Float'] == 5000.00]
SearchNumber

另一种搜索方法是查找从每个查询返回True的索引,使用and运算符,我们设法返回查询的值

searchDate =  df['Date'] == pd.Timestamp("2022-12-04 00:00:00'") 
seachFloat = df['Float'] == 5000.00
query = df[searchDate & seachFloat]
query

以另一种执行形式执行上一步中的表

query_dataframe = df[(df['Date'] == pd.Timestamp("2022-12-04 00:00:00")) & (df['Float'] == 5000.00)]
query_dataframe

步骤五:
你的这个检查我不是很理解,用一种简单的方法,我检查变量是否为空,我像你的例子一样执行返回

if len(query_dataframe):
    print('Yes')
else:
    print('No')

zbq4xfa0

zbq4xfa02#

如果我对您的问题理解正确的话,我相信您可以使用DataFrame的loc方法来选择与'date_input'和'float_input'值匹配的行,从而检查DF中是否存在与'date'和'float'值完全匹配的字符串。
然后,您可以检查生成的DataFrame是否为空,这表示至少有一行的值与“date_input”和“float_input "完全匹配。

修改代码

date_input = "2022-12-04 00:00:00"
float_input = "5000.00"

# Use loc to select the rows that match the values
matches = df.loc[(df['Date'] == pd.Timestamp(date_input)) & (df['Float'] == float(float_input))]

# Check if the resulting DataFrame is empty or not
if not matches.empty:
    print('YES')
else:
    print('NO')
polhcujo

polhcujo3#

如果[日期输入,浮点输入]在df.值中:
打印("是")
否则:
打印("否")

相关问题