Python中数据集之间的通用列名

时间:2018-07-13 19:24:04

标签: python-3.x

我有6个数据集。它们的名称是:e10_all,e11_all,e12_all,e13_all,e14_all和e19_all。

所有列和行的数量都不同,但是有一些常见的列。我需要将这些列的行附加在一起。首先,我想确定所有数据集共有的列,因此我知道要在SQL查询中选择哪些列。

在R中,我可以使用:

# Create list of dts
list_df = list(e10_all, e11_all, e12_all, e13_all, e14_all, e19_all)

col_common = colnames(list_df[[1]])

# Write for loop
for (i in 2:length(list_df)){
  col_common = intersect(col_common, colnames(list_df[[i]]))
}

# View the common columns
col_common

# Get as a comma-separated list
cat(noquote(paste(col_common, collapse = ',')))

我想做同样的事情,但是用Python。有人碰巧知道一种方法吗?

谢谢

1 个答案:

答案 0 :(得分:2)

大熊猫没什么不同。制作一些虚拟数据帧:

>>> import pandas as pd
>>> e10_all = pd.DataFrame({"A": [1,2], "B": [2,3], "C": [2,3]})
>>> e11_all = pd.DataFrame({"B": [4,5], "C": [5,6]})
>>> e12_all = pd.DataFrame({"B": [1,2], "C": [3,4], "M": [8,9]})

然后您的代码将转换为类似的内容

>>> list_df = [e10_all, e11_all, e12_all]
>>> col_common = set.intersection(*(set(df.columns) for df in list_df))
>>> col_common
{'C', 'B'}
>>> ','.join(sorted(col_common))
'B,C'

第二行将每个框架的列变成一组,然后取所有框架的交集。尽管我们倾向于避免在可以避免的地方编写循环,并且倾向于将循环直接遍历元素(for df in list_df[1:]:),而不是通过索引进行遍历,但是对您的代码进行更直接的翻译也可以。还是

col_common = set(list_df[0].columns)
for i in range(1, len(list_df)):
    col_common = col_common.intersection(list_df[i].columns)

将完成工作。