Python 熊猫用非数值减去两个数据帧

Python 熊猫用非数值减去两个数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,如: df: a b c d 0 12 "vik" [9, 18] "SS" 1 13 "Rah" [10, 18] "YY" a b c d 0 12 "vik" [9, 18] "SS" 1 13 "Rah" [10, 18] "YY" 2 14 "Dil" [11, 18] "ZZ" import pand

我有两个数据帧,如:

df:

    a       b         c      d
0  12   "vik"   [9,  18]   "SS"
1  13   "Rah"   [10, 18]   "YY"
    a       b         c      d
0  12   "vik"   [9,  18]   "SS"
1  13   "Rah"   [10, 18]   "YY"
2  14   "Dil"   [11, 18]   "ZZ"
import pandas as pd

df = pd.DataFrame({"a": [12, 13], "b":["vik", "Rah"], "c":[[9,  18], [10, 18]], "d":["SS", "YY"]})
df2 = pd.DataFrame({"a": [12, 13, 14], "b":["vik", "Rah", "Dil"], "c":[[9,  18], [10, 18], [11, 18]], "d":["SS", "YY", "ZZ"]})

df3 = pd.concat([df, df2], ignore_index=True)
df3["c"] = df3["c"].apply(tuple)
print(df3.drop_duplicates(keep=False))
df2:

    a       b         c      d
0  12   "vik"   [9,  18]   "SS"
1  13   "Rah"   [10, 18]   "YY"
    a       b         c      d
0  12   "vik"   [9,  18]   "SS"
1  13   "Rah"   [10, 18]   "YY"
2  14   "Dil"   [11, 18]   "ZZ"
import pandas as pd

df = pd.DataFrame({"a": [12, 13], "b":["vik", "Rah"], "c":[[9,  18], [10, 18]], "d":["SS", "YY"]})
df2 = pd.DataFrame({"a": [12, 13, 14], "b":["vik", "Rah", "Dil"], "c":[[9,  18], [10, 18], [11, 18]], "d":["SS", "YY", "ZZ"]})

df3 = pd.concat([df, df2], ignore_index=True)
df3["c"] = df3["c"].apply(tuple)
print(df3.drop_duplicates(keep=False))
我想从df2中删除df中的行。我试过了

df2.sub(df, fill_values=0)
这给了我一个错误
TypeError:-:'str'和'str'不支持的操作数类型

我期望的输出如下所示:

    a       b         c      d
0  14   "Dil"   [11, 18]   "ZZ"
任何帮助都是可观的。

与left join和参数一起使用
indicator=True
,然后过滤并删除列
\u merge

df1['c'] = df1['c'].apply(tuple)
df2['c'] = df2['c'].apply(tuple)

df3 = (df2.merge(df, how='left', indicator=True)
          .query('_merge == "left_only"')
          .drop('_merge', axis=1))

df3['c'] = df3['c'].apply(list)
print (df3)
    a    b         c   d
2  14  Dil  [11, 18]  ZZ

这是一种使用
concat
drop\u duplicates

Ex:

    a       b         c      d
0  12   "vik"   [9,  18]   "SS"
1  13   "Rah"   [10, 18]   "YY"
    a       b         c      d
0  12   "vik"   [9,  18]   "SS"
1  13   "Rah"   [10, 18]   "YY"
2  14   "Dil"   [11, 18]   "ZZ"
import pandas as pd

df = pd.DataFrame({"a": [12, 13], "b":["vik", "Rah"], "c":[[9,  18], [10, 18]], "d":["SS", "YY"]})
df2 = pd.DataFrame({"a": [12, 13, 14], "b":["vik", "Rah", "Dil"], "c":[[9,  18], [10, 18], [11, 18]], "d":["SS", "YY", "ZZ"]})

df3 = pd.concat([df, df2], ignore_index=True)
df3["c"] = df3["c"].apply(tuple)
print(df3.drop_duplicates(keep=False))

@bro grammer-不幸的是,如果更改
df2的索引值失败,则不会。啊,是的!你是对的。很好的捕获。它显示错误
TypeError:unhabable类型:“list”
@VikasDamodar-处理pandas中的列表确实有问题,需要将列转换为元组。检查编辑的答案。