Pandas 使用来自单独数据帧的值在数据帧中搜索子字符串
Pandas search a dataframe for substrings using the values from a separate dataframe
我已经解决了这个问题,但似乎无法解决问题。基本上我有一个 excel spreadsheet 和多个 sheets,对于这个 python 程序我只关心两个 sheets,更具体地说一个每个 sheet.
的列
我想从一个 dataframe/column (A) 中获取所有值,然后查看第二个 dataframe/column (B) 是否包含 A 列中该值的子字符串。最终我想要一个csv 输出包含 A 列中的行,其中 A 列中的值在 B 列中没有匹配的子字符串。
到目前为止我已经知道了
读取 excel 文件并分别使用我感兴趣的列创建两个数据帧:
df_A = pd.read_excel('test.xlsx',
sheet_name='Sheet_1',
usecols=['Column_A'])
df_B = pd.read_excel('test.xlsx',
sheet_name='Sheet_2',
usecols=['Column_B'])
以下是数据帧的内容:
Column_A
20220201_ABC_TEST-00012345_987654
20220201_ABC_TEST-00012346_987654
20220201_ABC_TEST-00012347_987654
20220201_ABC_TEST-00012351_987654
20220201_ABC_TEST-00012352_987654
20220201_ABC_TEST-00012353_987654
Column_B
TEST-00012345
TEST-00012346
TEST-00012347
TEST-00012348
TEST-00012349
TEST-00012350
这是我不知道如何正确完成的部分,即从 df_A 中获取所有值并将它们与 df_B 中的所有值进行比较以找出哪个来自 df_A 的值在 df_B.
中没有子串匹配
substring_matches = df_A.str.contains(df_B)
print(substring_matches)
这给出了一个错误:
AttributeError: 'DataFrame' object has no attribute 'str'
所以我在这里做的事情不太正确。
试试这个:
substring_matches = df_A['Column_A'].apply(lambda s1: df_B['Column B'].apply(lambda s2: s2 in s1).any())
df_A[~substring_matches].to_csv('unmatched.csv')
我已经解决了这个问题,但似乎无法解决问题。基本上我有一个 excel spreadsheet 和多个 sheets,对于这个 python 程序我只关心两个 sheets,更具体地说一个每个 sheet.
的列我想从一个 dataframe/column (A) 中获取所有值,然后查看第二个 dataframe/column (B) 是否包含 A 列中该值的子字符串。最终我想要一个csv 输出包含 A 列中的行,其中 A 列中的值在 B 列中没有匹配的子字符串。
到目前为止我已经知道了
读取 excel 文件并分别使用我感兴趣的列创建两个数据帧:
df_A = pd.read_excel('test.xlsx',
sheet_name='Sheet_1',
usecols=['Column_A'])
df_B = pd.read_excel('test.xlsx',
sheet_name='Sheet_2',
usecols=['Column_B'])
以下是数据帧的内容:
Column_A
20220201_ABC_TEST-00012345_987654
20220201_ABC_TEST-00012346_987654
20220201_ABC_TEST-00012347_987654
20220201_ABC_TEST-00012351_987654
20220201_ABC_TEST-00012352_987654
20220201_ABC_TEST-00012353_987654
Column_B
TEST-00012345
TEST-00012346
TEST-00012347
TEST-00012348
TEST-00012349
TEST-00012350
这是我不知道如何正确完成的部分,即从 df_A 中获取所有值并将它们与 df_B 中的所有值进行比较以找出哪个来自 df_A 的值在 df_B.
中没有子串匹配substring_matches = df_A.str.contains(df_B)
print(substring_matches)
这给出了一个错误:
AttributeError: 'DataFrame' object has no attribute 'str'
所以我在这里做的事情不太正确。
试试这个:
substring_matches = df_A['Column_A'].apply(lambda s1: df_B['Column B'].apply(lambda s2: s2 in s1).any())
df_A[~substring_matches].to_csv('unmatched.csv')