如果 pandas 数据框中的两个单独的单元格不包含文本,是否删除整行?
If two seperate cells in a pandas dataframe doesn't contain a text, drop the entire row?
Pandas Dataframe 假设示例:
'A' 'B' 'C'
A+1 B+1 1
A+2 B+1 2
A+3 B+1 3
假设我只想保留第 'A' 列包含“1”且第 'B' 列包含“1”的行,不满足此条件的任何其他行都会被删除。
因此输出数据帧如下所示:
'A' 'B' 'C'
A+1 B+1 1
我的尝试是遍历 A 列和 B 列中的每一行:
for i,j in df.iterrows():
if "1" in (df['A']) & (df['B']):
print()
else:
df.drop()
但我得到了这个错误:
TypeError: unsupported operand type(s) for &: 'str' and 'str'
还有其他方法吗?
您可以对 A
和 B
列使用 Series.str.contains
,为每个列 return 一个掩码,如果该列中的项目包含1
,否则为假。然后使用 &
将它们连接在一起(即 return 一个新掩码,其中如果其他掩码中的两个项目都为真,则每个项目为真,否则为假),并使用结果索引数据帧:
subset = df[df['A'].str.contains('1') & df['B'].str.contains('1')]
输出:
>>> subset
A B C
0 A+1 B+1 1
Pandas Dataframe 假设示例:
'A' 'B' 'C'
A+1 B+1 1
A+2 B+1 2
A+3 B+1 3
假设我只想保留第 'A' 列包含“1”且第 'B' 列包含“1”的行,不满足此条件的任何其他行都会被删除。
因此输出数据帧如下所示:
'A' 'B' 'C'
A+1 B+1 1
我的尝试是遍历 A 列和 B 列中的每一行:
for i,j in df.iterrows():
if "1" in (df['A']) & (df['B']):
print()
else:
df.drop()
但我得到了这个错误:
TypeError: unsupported operand type(s) for &: 'str' and 'str'
还有其他方法吗?
您可以对 A
和 B
列使用 Series.str.contains
,为每个列 return 一个掩码,如果该列中的项目包含1
,否则为假。然后使用 &
将它们连接在一起(即 return 一个新掩码,其中如果其他掩码中的两个项目都为真,则每个项目为真,否则为假),并使用结果索引数据帧:
subset = df[df['A'].str.contains('1') & df['B'].str.contains('1')]
输出:
>>> subset
A B C
0 A+1 B+1 1