这里的大多数问题与在特定列中找到诸如字符串之类的模式并对其进行处理有关。但是,如果我不知道该专栏怎么办?
链接到特定列的Q / A:Link
我尝试比较两个数据框,以确保它们匹配,没有添加列或删除行。这些文件之一就像模板。一组代表值范围的地方。
示例:
template = pd.DataFrame(
{'Headline': ['Subheading', '', 'Animal', 'Tiger', 'Bird', 'Lion'],
'Headline2': ['', 'Weight', 2017, 'group1', 'group2', 'group3'],
'Headline3': ['', '', 2018, 'group1', 'group2', 'group3']
})
testfile = pd.DataFrame(
{'Headline': ['Subheading', '', 'Animal', 'Tiger', 'Bird', 'Lion'],
'Headline2': ['', 'Weight', 2017, 150, 15, 201],
'Headline3': ['', '', 2018, 152, 12, 198]
})
Headline Headline2 Headline3
0 Subheading
1 Weight
2 Animal 2017 2018
3 Tiger group1 group1
4 Bird group2 group2
5 Lion group3 group3
Headline Headline2 Headline3
0 Subheading
1 Weight
2 Animal 2017 2018
3 Tiger 150 152
4 Bird 15 12
5 Lion 201 198
如果我这样做print((template == testfile).all().all())
,那就是False
。
作为一个人,我知道第三到第五行是不同的,所以我想从比较中排除它们:
drop_r = [3, 4, 5]
template = template.drop(template.index[drop_r])
testfile = testfile.drop(testfile.index[drop_r])
然后我会得到print((template == testfile).all().all())
是True
在行包含组[n]的情况下,如何将所有行号放入对象drop_r
中。
我需要找到模板中的行,其中子字符串“ group”出现在任何列中吗?
答案 0 :(得分:2)
要检查是否可以在DataFrame中的任何位置找到'group'
,可以将其堆叠,请检查是否包含'group'
,然后获取索引。
import numpy as np
ids = np.unique(template.stack()[template.astype('str').stack().str.contains('group')].index.get_level_values(0))
#array([3, 4, 5], dtype=int64)
要查看不良行:
template.reindex(ids)
# Headline Headline2 Headline3
#3 Tiger group1 group1
#4 Bird group2 group2
#5 Lion group3 group3
要查看好的行:
template[~template.index.isin(ids)]
# Headline Headline2 Headline3
#0 Subheading
#1 Weight
#2 Animal 2017 2018