所以这个链接(Deleting DataFrame row in Pandas based on column value)描述了如何根据存在的值进行非常简单的列删除...
...此行将删除列line_race
包含值0
的行:
df = df[df.line_race != 0]
我的问题虽然有点深入。
我想删除我的DataFrame中的所有行,其中第一列中的值不是特定值。具体来说,如果第一列fish_frame[0]
包含的字符串与另一个列表stocks
中的值不匹配,则将其删除。
我认为这样的事情可以解决问题,但它并没有:
fish_frame = fish_frame[fish_frame[0] == (any s in fish_frame[0] for s in stocks)]
我的DataFrame的第一列,fish_frame[0]
:
0 NEFS X Available stocks
1 11/6/2013
2 Chris King
3 Package $4000 or BO
4 GOM Winter Flounder
5 HAD GBW
6 POLLOCK
7 WINTER FL SNE
8 COD GBW
9 WHITEHAKE
10 HAD GBE
11 WINTER FL GBbb
12 Grey Sole
13 YELLOWTAIL SNE
14 YELLOWTAIL GB
15 REDFISH
16 NaN
17 List A
18 Package $10,000 or BO
19 GOM Winter Flounder
我的列表stocks
:
(
'GB COD EAST',
'GB COD EAST ACE',
'GB COD WEST ACE',
'GBE COD',
'GB COD WEST',
'GBW COD',
'GOM COD',
'GB HADDOCK EAST',
'GBE HADDOCK',
'GBW HADDOCK',
'GBE HADD',
'GB HADDOCK WEST',
'GBYT',
'GB YT',
'GBW HADD',
'GOM HADDOCK',
'GOM HADD',
'GOM HAD',
'GOM HADOCK',
'PLAICE',
'DABS',
'POLLOCK',
'POLL',
'REDFISH',
'REDS',
'RED',
'WHITE HAKE' ,
'WHITEHAKE',
'WHAKE',
'WHAK',
'GB WINTER FLOUNDER',
'GB WINTER FL',
'GB BB',
'GB WINTER',
'GB BLACK BACKS',
'GB BLACKBACKS',
'GOM WINTER FLOUNDER',
'WINTER GOM FLOUNDER',
'GOM BLACKBACKS',
'GOM BB',
'GOM WINTER',
'SNE WINTER FLOUNDER',
'SNE WINTER',
'SNE/MA WINTER FLOUNDER',
'SNE/MA YELLOWTAIL',
'SNE BLACKBACK',
'SNE BLACKBACKS',
'SNE BB',
'WITCH FLOUNDER',
'WITCH FL',
'WITCH',
'WHICH',
'WHITCH',
'GREYSOLE',
'GREY SOLE',
'CC/GOM YELLOWTAIL FLOUNDER',
'GOM YELLOWTAIL',
'GOM YELLOW TAIL',
'GOM YT',
'GB YELLOWTAIL FLOUNDER',
'GB YELLOWTAIL',
'GB YT',
'SNE/MA YELLOWTAIL FLOUNDER',
'SNE YT',
'SNE YELLOWTAIL',
'SNE YELLOW TAIL',
'SCALLOP IFQ'
)
任何帮助解决这个问题都将不胜感激,谢谢。
答案 0 :(得分:1)
您想要从stocks
对象构造一个正则表达式模式。然后使用pd.Series.str.contains
来测试是否匹配。最后,使用布尔索引来删除那些没有匹配的内容。
df[df[0].astype(str).str.contains('|'.join(stocks))]
6 POLLOCK
9 WHITEHAKE
15 REDFISH
Name: 0, dtype: object