Python 3.x 删除包含特定文本的行
我的目标是获得列的值的组合。比如说,Python 3.x 删除包含特定文本的行,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我的目标是获得列的值的组合。比如说, UT水果1水果2水果3 0 I1苹果橙桃 1 I2苹果柠檬南 2 I3红星苹果橙 在这个dataframe中,我想要组合Fruit_*列的值。结果是(苹果,橙色),(苹果,桃子),(橙色,桃子) 如您所见,数据帧具有NaN。因此,在组合工作之后,我将删除带有特定文本“nan”的行。通过阅读一些与此任务相关的帖子,我编写了以下代码 将熊猫作为pd导入 将numpy作为np导入 从itertools导入组合 df=pd.DataFrame([['I1','Ap
UT水果1水果2水果3
0 I1苹果橙桃
1 I2苹果柠檬南
2 I3红星苹果橙
在这个dataframe中,我想要组合Fruit_*列的值。结果是(苹果,橙色),(苹果,桃子),(橙色,桃子)
如您所见,数据帧具有NaN。因此,在组合工作之后,我将删除带有特定文本“nan”的行。通过阅读一些与此任务相关的帖子,我编写了以下代码
将熊猫作为pd导入
将numpy作为np导入
从itertools导入组合
df=pd.DataFrame([['I1','Apple','Orange','Peach'],
['I2','Apple','Lemon',np.NAN],
['I3'、'Starfruit'、'Apple'、'Orange'],
列=['UT'、'Fruit_1'、'Fruit_2'、'Fruit_3'])
temp1=df.set_索引('UT')
temp2=temp1.apply(lambda x:list(组合(x,2)),1)
temp3=temp2.apply(λx:pd.系列(x))
temp4=temp3.stack().reset_索引(级别=[0,1])
del temp4[“1级”]
temp4.columns=['UT','pair']
temp4[~temp4.pair.str.contains('nan')]
但是,运行此代码后,我收到一条错误消息:
TypeError:输入类型不支持ufunc“invert”,并且无法根据强制转换规则“safe”将输入安全强制为任何支持的类型
如何解决此错误?对于熊猫0.25,可以使用技巧删除
组合中的NaNs
,方法是通过列表理解过滤掉它们,因为np.NaN!=np.NaN
作者:
对于较旧版本:
temp4 = (df.set_index ('UT')
.stack()
.groupby(level=0)
.apply(lambda x: pd.Series(list(combinations (x, 2))))
.reset_index(level=1, drop=True)
.reset_index(name='pair'))
print (temp4)
UT pair
0 I1 (Apple, Orange)
1 I1 (Apple, Peach)
2 I1 (Orange, Peach)
3 I2 (Apple, Lemon)
4 I3 (Starfruit, Apple)
5 I3 (Starfruit, Orange)
6 I3 (Apple, Orange)
对于熊猫,0.25可能与技巧一起使用,通过使用过滤器过滤掉组合中的NaNs
,因为np.NaN!=np.NaN
作者:
对于较旧版本:
temp4 = (df.set_index ('UT')
.stack()
.groupby(level=0)
.apply(lambda x: pd.Series(list(combinations (x, 2))))
.reset_index(level=1, drop=True)
.reset_index(name='pair'))
print (temp4)
UT pair
0 I1 (Apple, Orange)
1 I1 (Apple, Peach)
2 I1 (Orange, Peach)
3 I2 (Apple, Lemon)
4 I3 (Starfruit, Apple)
5 I3 (Starfruit, Orange)
6 I3 (Apple, Orange)