Pandas根据第一列值删除行

2024-05-16 14:26:52 发布

您现在位置:Python中文网/ 问答频道 /正文

所以这个链接(Deleting DataFrame row in Pandas based on column value)描述了如何根据一个值进行一个非常简单的列删除。。。在

…此行将删除列line_race包含值0的行:

df = df[df.line_race != 0]

我的问题更深入一点。在

我想删除数据帧中第一列中的值不是某个值的所有行。特别是,如果第一列fish_frame[0]包含与另一个列表stocks中的值不匹配的字符串,则删除它。在

我以为这样的东西能起作用,但事实并非如此:

^{pr2}$

我的数据帧的第一列,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'
        )

如果您能帮忙解决这个问题,我们将不胜感激,谢谢。在


Tags: dfcodytgbhadflsnestocks
1条回答
网友
1楼 · 发布于 2024-05-16 14:26:52

您想从stocks对象构造一个regex模式。然后使用pd.Series.str.contains测试是否存在匹配项。最后,使用布尔索引删除那些不匹配的。在

df[df[0].astype(str).str.contains('|'.join(stocks))]

6       POLLOCK
9     WHITEHAKE
15      REDFISH
Name: 0, dtype: object

相关问题 更多 >