如何使用 python pytest 断言 2 个数据帧
How to assert 2 data frames using python pytest
我是 pytest 和数据框的新手。在这里的任何帮助表示赞赏。
我有 2 个数据框。第一个数据帧是从 csv 文件中获取的,第二个数据帧是从 database.I 中获取的,需要断言 df1 中的所有行以与 df2 进行比较。 df2 的预期结果是失败,因为名称“James”不等于“Linda”。我正在寻找 pytest 断言。提前致谢。
Dataframe1:
|编号 |名称 |出生日期 | Phone|
|:---- |:------: | -----:|-----:|
| 1 |詹姆斯 | 2000 年 1 月 9 日|0101010|
| 2 |山姆 | 9/01/1989|0202020|
Dataframe2:
|编号 |名称 |出生日期 | Phone|
|:---- |:------: | -----:|-----:|
| 1 |琳达 | 2000 年 1 月 9 日|0101010|
| 2 |山姆 | 9/01/1989|0202020|
源代码:
from sqlalchemy import create_engine
import pymysql
import pandas as pd
df1 = pd.read_csv(r'Filename.csv')
sqlEngine = create_engine('mysql+pymysql://root:root@localhost', pool_recycle=3600)
dbConnection = sqlEngine.connect()
df2 = pd.read_sql("SELECT * FROM tablename", dbConnection);
dbConnection.close()
print(df1)
print(df2)
def test_compare_database():
for a, b in zip(df1, df2):
yield a, b
@pytest.mark.parametrize('a, b', test_compare_database())
def test_compare_src_trg_data(a, b):
assert a == b
结果 - 当我 运行 上面的代码时,只比较两个数据帧的第一行。
Passed tests/main_test.py::test_compare_src_trg_data[ID-ID] 0.00
Passed tests/main_test.py::test_compare_src_trg_data[Name-Name] 0.00
Passed tests/main_test.py::test_compare_src_trg_data[DOB-DOB] 0.00
Passed tests/main_test.py::test_compare_src_trg_data[Phone-Phone] 0.00
您可以使用以下功能:
import pandas as pd
pd.testing.assert_frame_equal(a,b)
我是 pytest 和数据框的新手。在这里的任何帮助表示赞赏。 我有 2 个数据框。第一个数据帧是从 csv 文件中获取的,第二个数据帧是从 database.I 中获取的,需要断言 df1 中的所有行以与 df2 进行比较。 df2 的预期结果是失败,因为名称“James”不等于“Linda”。我正在寻找 pytest 断言。提前致谢。
Dataframe1: |编号 |名称 |出生日期 | Phone| |:---- |:------: | -----:|-----:| | 1 |詹姆斯 | 2000 年 1 月 9 日|0101010| | 2 |山姆 | 9/01/1989|0202020|
Dataframe2: |编号 |名称 |出生日期 | Phone| |:---- |:------: | -----:|-----:| | 1 |琳达 | 2000 年 1 月 9 日|0101010| | 2 |山姆 | 9/01/1989|0202020|
源代码:
from sqlalchemy import create_engine
import pymysql
import pandas as pd
df1 = pd.read_csv(r'Filename.csv')
sqlEngine = create_engine('mysql+pymysql://root:root@localhost', pool_recycle=3600)
dbConnection = sqlEngine.connect()
df2 = pd.read_sql("SELECT * FROM tablename", dbConnection);
dbConnection.close()
print(df1)
print(df2)
def test_compare_database():
for a, b in zip(df1, df2):
yield a, b
@pytest.mark.parametrize('a, b', test_compare_database())
def test_compare_src_trg_data(a, b):
assert a == b
结果 - 当我 运行 上面的代码时,只比较两个数据帧的第一行。
Passed tests/main_test.py::test_compare_src_trg_data[ID-ID] 0.00
Passed tests/main_test.py::test_compare_src_trg_data[Name-Name] 0.00
Passed tests/main_test.py::test_compare_src_trg_data[DOB-DOB] 0.00
Passed tests/main_test.py::test_compare_src_trg_data[Phone-Phone] 0.00
您可以使用以下功能:
import pandas as pd
pd.testing.assert_frame_equal(a,b)