Python - 使数据框的列与列表元素一致

标签 python pandas dataframe

根据我的阅读,从 DataFrame 中添加和删除列很容易,但我想知道是否已经有一种方法可以实现我想要实现的目标,以便避免重新发明轮子。

假设我有 DataFrame x:

   a  b   c
0  1  5   8
1  2  6   9
2  3  7  10

我想验证列名是否仅对应于列表 l 中包含的元素。如果 l 中的元素少于 x 中的列,我希望删除缺少的列。

例如,如果 l = ["a", "b"]x 将变为:

   a   c
0  1   8
1  2   9
2  3  10

另一方面,如果 l 中的元素多于 x 中的列,我想创建新的、相应命名的列,其中包含所有值列被设置为 0。

例如,如果 l = ["a", "b", "c", "d"]x 将变为:

   a  b   c  d
0  1  5   8  0
1  2  6   9  0
2  3  7  10  0

我可以做一个循环来检查 x 中的列名和 l 中的元素之间的一致性,但是还有比这更有效的方法吗?

最佳答案

如果需要,只需使用(感谢 @Bill 添加 .astype(np.int)。请注意,这会将整个数据帧转换为整数):

df.loc[:, l].fillna(0).astype(np.int)

案例一:

l = ["a", "b"]
df.loc[:, l].fillna(0).astype(np.int)

    a   b
0   1   5
1   2   6
2   3   7

案例二:

l = ["a", "b", "c", "d"]
df.loc[:, l].fillna(0).astype(np.int)

    a   b   c   d
0   1   5   8   0
1   2   6   9   0
2   3   7   10  0

关于Python - 使数据框的列与列表元素一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46027368/

相关文章:

python - 仅针对特定列禁用 pandas read_csv 中的默认 na 解析

python - 使用 scipy Optimize curve_fit 拟合步骤位置变化的步骤函数

python - 对某些列进行 groupby 和 sum 与 pandas,同时还包括其他列

python-3.x - 如何检查嵌套列表是否存在以及如果存在则取消嵌套?

r - 如何根据特定列的值从数据帧构建矩阵?

python - 如何跨 Pandas 中的多个数据框列 "select distinct"?

python - 向 .csv 写入多于一列

Python webdriver 库未连接到 chromedriver -- "Can not connect to the Service/usr/local/bin/chromedriver"

python - 从一组 x、y 坐标计算表面的质心

python - pandas.DataFrame 可以有列表类型的列吗?