使用散列从数据框中删除列

Posted

技术标签:

【中文标题】使用散列从数据框中删除列【英文标题】:Remove columns from data frame with hashing 【发布时间】:2017-02-13 18:09:19 【问题描述】:

给定两个 pandas 数据框:

df1 = pd.read_csv(file1, names=['col1','col2','col3'])
df2 = pd.read_csv(file2, names=['col1','col2','col3'])

我想删除 df2 中 col1col2(或两者)的值在 df1 中不存在的所有行。

执行以下操作:

df2 = df2[(df2['col1'] in set(df1['col1'])) & (df2['col2'] in set(df1['col2']))]

产量:

TypeError: 'Series' 对象是可变的,因此它们不能被散列

【问题讨论】:

【参考方案1】:

我觉得你可以试试isin:

df2 = df2[(df2['col1'].isin(df1['col1'])) & (df2['col2'].isin(df1['col2']))]

df1 = pd.DataFrame('col1':[1,2,3,3],
                    'col2':[4,5,6,2],
                    'col3':[7,8,9,5])

print (df1)
   col1  col2  col3
0     1     4     7
1     2     5     8
2     3     6     9
3     3     2     5

df2 = pd.DataFrame('col1':[1,2,3,5],
                    'col2':[4,7,4,1],
                    'col3':[7,8,9,1])

print (df2)
   col1  col2  col3
0     1     4     7
1     2     7     8
2     3     4     9
3     5     1     1

df2 = df2[(df2['col1'].isin(df1['col1'])) & (df2['col2'].isin(df1['col2'].unique()))]
print (df2)
   col1  col2  col3
0     1     4     7
2     3     4     9

另一种解决方案是merge,因为默认情况下是内连接 (how='inner'),但它仅适用于在两个 DataFrames 中具有相同位置的值:

print (pd.merge(df1, df2))
   col1  col2  col3
0     1     4     7

【讨论】:

以上是关于使用散列从数据框中删除列的主要内容,如果未能解决你的问题,请参考以下文章

根据来自不同数据帧的行名将列从另一个数据帧复制到

使用其他表的列从表中删除

如何通过使用数据框中的其他列来聚合熊猫数据框中的列

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]

在r中将多个列从字符转换为数字格式

无法将 pandas 列从字符串转换为 int