将多个数据框的列名与Pandas中的原始列名进行比较

阿邦

假设我有一个df带标头的数据框a, b, c, d

我想与其他dfs (df1, df2, df3, ...)列名称进行比较我需要所有dfs的列名都应与完全相同df请注意,列名的不同顺序不应视为不同的列名)。

例如:

原始数据框:

df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
                   columns=['a', 'b', 'c'])

col = ['a', 'b', 'c']

dfs:

df1 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
                   columns=['a', 'c', 'b'])

退货identical columns name;

df2 = pd.DataFrame(np.array([[1, 2, 3, 10], [4, 5, 6, 11], [7, 8, 9, 12]]),
                   columns=['a', 'c', 'e', 'b'])

退货extra columns in dataframe;

df3 = pd.DataFrame(np.array([[1, 2], [4, 5], [7, 8]]),
                   columns=['a', 'c'])

退货missing columns in dataframe;

df4 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
                   columns=['a', '*c', 'b'])

退货errors in dataframe's column names;

df5 = pd.DataFrame(np.array([[1, 2, 3, 9], [4, 5, 6, 9], [7, 8, 9, 10]]),
                   columns=['a', 'b', 'b', 'c'])

返回extra columns in dataframe

如果过于复杂,则返回columns names are incorrect各种错误也可以

我该如何在熊猫中做到这一点?谢谢。

耶斯列尔

我认为这里设置是个不错的选择,因为顺序并不重要:

def compare(df, df1):
    orig = set(df.columns)
    
    c = set(df1.columns)

    #testing if length of set is same like length of columns names
    if len(c) != len(df1.columns):
        return ('extra columns in dataframe')
    #if same sets
    elif (c == orig):
        return ('identical columns name')
    #compared subsets
    elif c.issubset(orig):
        return ('missing columns in dataframe')
    #compared subsets
    elif orig.issubset(c):
        return ('extra columns in dataframe')
    else:
        return ('columns names are incorrect')

print(compare(df, df1))                    
print(compare(df, df2))    
print(compare(df, df3))    
print(compare(df, df4))    
print(compare(df, df5))    

identical columns name
extra columns in dataframe
missing columns in dataframe
columns names are incorrect
extra columns in dataframe

对于返回值:

def compare(df, df1):
    orig = set(df.columns)
    
    c = set(df1.columns)

    #testing if length of set is same like length of columns names
    if len(c) != len(df1.columns):
        col = df1.columns.tolist()
        a = set([str(x) for x in col if col.count(x) > 1])
        return f'duplicated columns: {", ".join(a)}'
    #if same sets
    elif (c == orig):
        return ('identical columns name')
    #compared subsets
    elif c.issubset(orig):
        a = (str(x) for x in orig - c)
        return f'missing columns: {", ".join(a)}'
    #compared subsets
    elif orig.issubset(c):
        a = (str(x) for x in c - orig)
        return f'extra columns: {", ".join(a)}'
    else:
        a = (str(x) for x in c - orig)
        return f'incorrect: {", ".join(a)}'

print(compare(df, df1))                    
print(compare(df, df2))    
print(compare(df, df3))    
print(compare(df, df4))    
print(compare(df, df5)) 

identical columns name
extra columns: e
missing columns: b
incorrect: *c
duplicated columns: b   

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从多个数据框中查找不同的列名

在多个数据框中搜索相似的列名称

如何同时在多个数据框中更改列名?

循环更改多个数据框的列名

比较多个熊猫数据框的列名

根据列名称将大型数据框拆分为多个数据框

pandas concat比较具有相同列名的2个数据框如何构建不同的列?

将新列名映射到 Pandas 中的数据框

将具有相同列名但值不同的列添加到列表中的多个数据框

将 Python pandas 中的三个数据框与重复条目进行比较

根据索引,列名和原始值映射Pandas数据框?

从单独的值列表中替换多个数据框(在列表中)列名?

在R中的多个数据框中的列名称上添加不同的后缀

如何根据条件更改列表中多个数据框中的列名称?

如何使用R中的映射文件更改多个数据框中的列名?

向列表中多个数据框中的选定列名称添加列值前缀

熊猫:合并多个数据框和控制列名称?

在循环中更改多个数据框的列名

合并多个数据框 - 如何自动分配列名?

R 查找多个数据框的匹配列名

循环多个数据框并使用胶水 R 保存列名

在 Pandas 数据框中重建列名

列名未在 Pandas 数据框中引用

Python Pandas通过将值连接到列名来组合2个数据框

合并熊猫中的两个数据框,多个相同的列名。无法弄清楚语法

检查多个数据框中的列名并按名称删除列

合并文件夹中具有不同列名的多个数据框

将数据框名称和列名称输出到 pandas 中的数据框

Python Pandas:通过ID或行比较具有不同列名称的两个数据框的值