Pandas柱

2024-05-16 06:00:42 发布

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

我知道删除一个数据框的列应该很容易:

df.drop(df.columns[1], axis=1)按索引删除

或者dr.dropna(axis=1, how='any')根据它是否包含NaNs来删除

但这两种方法都不适用于我的数据帧,我不确定这是否是因为格式问题或数据类型问题,或者是对这些命令的误用或误解。

这是我的数据框:

fish_frame after append new_column:                         0       1       2      3                          4  \
2                 GBE COD     NaN     NaN    600                        NaN   
3                 GBW COD     NaN  11,189    NaN                        NaN   
4                 GOM COD     NaN       0    NaN  Package Deal - $40,753.69   
5                 POLLOCK     NaN     NaN  1,103                        NaN   
6                   WHAKE     NaN     NaN     12                        NaN   
7             GBE HADDOCK     NaN  10,730    NaN                        NaN   
8             GBW HADDOCK     NaN  64,147    NaN                        NaN   
9             GOM HADDOCK     NaN       0    NaN                        NaN   
10                REDFISH     NaN     NaN      0                        NaN   
11         WITCH FLOUNDER     NaN     370    NaN                        NaN   
12                 PLAICE     NaN     NaN    622                        NaN   
13     GB WINTER FLOUNDER  54,315     NaN    NaN                        NaN   
14    GOM WINTER FLOUNDER     653     NaN    NaN                        NaN   
15  SNEMA WINTER FLOUNDER  14,601     NaN    NaN                        NaN   
16          GB YELLOWTAIL     NaN   1,663    NaN                        NaN   
17       SNEMA YELLOWTAIL     NaN   1,370    NaN                        NaN   
18       CCGOM YELLOWTAIL   1,812     NaN    NaN                        NaN   

       6        package_deal_column Package_Price new_column  
2    NaN  Package Deal - $40,753.69          None        600  
3    NaN  Package Deal - $40,753.69          None    11,1890  
4   None  Package Deal - $40,753.69          None          0  
5    NaN  Package Deal - $40,753.69          None      1,103  
6    NaN  Package Deal - $40,753.69          None         12  
7    NaN  Package Deal - $40,753.69          None    10,7300  
8    NaN  Package Deal - $40,753.69          None    64,1470  
9    NaN  Package Deal - $40,753.69          None          0  
10   NaN  Package Deal - $40,753.69          None          0  
11   NaN  Package Deal - $40,753.69          None       3700  
12   NaN  Package Deal - $40,753.69          None        622  
13  None  Package Deal - $40,753.69          None   54,31500  
14  None  Package Deal - $40,753.69          None      65300  
15  None  Package Deal - $40,753.69          None   14,60100  
16   NaN  Package Deal - $40,753.69          None     1,6630  
17   NaN  Package Deal - $40,753.69          None     1,3700  
18  None  Package Deal - $40,753.69          None    1,81200 

然后我有以下几行代码:

fish_frame.drop(fish_frame.columns[1], axis=1)
fish_frame.drop(fish_frame.columns[2], axis=1)
fish_frame.drop(fish_frame.columns[3], axis=1)
fish_frame.drop(fish_frame.columns[4:5], axis=1)
#del fish_frame[4:5]    #doesn't work, "TypeError: slice(4, 5, None) is an invalid key"
del fish_frame['Package_Price']
fish_frame.dropna(axis=1, how='any')

然后我再次打印出数据帧,结果是:

NEW fish_frame:                         0       1       2      3                          4  \
2                 GBE COD     NaN     NaN    600                        NaN   
3                 GBW COD     NaN  11,189    NaN                        NaN   
4                 GOM COD     NaN       0    NaN  Package Deal - $40,753.69   
5                 POLLOCK     NaN     NaN  1,103                        NaN   
6                   WHAKE     NaN     NaN     12                        NaN   
7             GBE HADDOCK     NaN  10,730    NaN                        NaN   
8             GBW HADDOCK     NaN  64,147    NaN                        NaN   
9             GOM HADDOCK     NaN       0    NaN                        NaN   
10                REDFISH     NaN     NaN      0                        NaN   
11         WITCH FLOUNDER     NaN     370    NaN                        NaN   
12                 PLAICE     NaN     NaN    622                        NaN   
13     GB WINTER FLOUNDER  54,315     NaN    NaN                        NaN   
14    GOM WINTER FLOUNDER     653     NaN    NaN                        NaN   
15  SNEMA WINTER FLOUNDER  14,601     NaN    NaN                        NaN   
16          GB YELLOWTAIL     NaN   1,663    NaN                        NaN   
17       SNEMA YELLOWTAIL     NaN   1,370    NaN                        NaN   
18       CCGOM YELLOWTAIL   1,812     NaN    NaN                        NaN   

       6        package_deal_column new_column  
2    NaN  Package Deal - $40,753.69        600  
3    NaN  Package Deal - $40,753.69    11,1890  
4   None  Package Deal - $40,753.69          0  
5    NaN  Package Deal - $40,753.69      1,103  
6    NaN  Package Deal - $40,753.69         12  
7    NaN  Package Deal - $40,753.69    10,7300  
8    NaN  Package Deal - $40,753.69    64,1470  
9    NaN  Package Deal - $40,753.69          0  
10   NaN  Package Deal - $40,753.69          0  
11   NaN  Package Deal - $40,753.69       3700  
12   NaN  Package Deal - $40,753.69        622  
13  None  Package Deal - $40,753.69   54,31500  
14  None  Package Deal - $40,753.69      65300  
15  None  Package Deal - $40,753.69   14,60100  
16   NaN  Package Deal - $40,753.69     1,6630  
17   NaN  Package Deal - $40,753.69     1,3700  
18  None  Package Deal - $40,753.69    1,81200  

不使用NaNdrop工作,也不使用索引drop工作。只有特定的drop[column name]命令可以工作,但我不能在这个脚本的每个迭代中都这样做。

我很困惑,希望这不是我犯的愚蠢的错误。

另外,我自己也不完全理解这些信息,但是打印fish_frame.info()会产生:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 17 entries, 2 to 18
Data columns (total 8 columns):
0                      17 non-null object
1                      4 non-null object
2                      8 non-null object
3                      5 non-null object
4                      1 non-null object
6                      0 non-null object
package_deal_column    17 non-null object
new_column             17 non-null object
dtypes: object(8)
memory usage: 586.0+ bytes

如有任何帮助,我们将不胜感激。


Tags: columnsnonepackageobjectcolumnnanframenull
3条回答

如果没有我从输出中看不到的错误,您只是忘记了使用inplace参数:

df.drop(df.columns[1], axis=1, inplace=True)

以下是一些替代方案:

设置:

df = pd.DataFrame(np.random.rand(3,5), columns=list('abcde'))

In [57]: cols_to_drop = ['b', 'd']

In [63]: df
Out[63]:
          a         b         c         d         e
0  0.758670  0.734007  0.027711  0.614674  0.955711
1  0.833110  0.242010  0.922831  0.165401  0.546079
2  0.414916  0.949050  0.608527  0.018036  0.230343

选项1:

df = df[df.columns.drop(col_to_drop)]

选择2:

df = df[df.columns.difference(cols_to_drop)]

选择3:

df = df.loc[:, ~df.columns.isin(cols_to_drop)]

全部返回:

          a         c         e
0  0.758670  0.027711  0.955711
1  0.833110  0.922831  0.546079
2  0.414916  0.608527  0.230343

如果您试图删除带有NaN的列,那么下面的代码就足够了。嗯,我自己也试过了,效果不错。

df = df.dropna(axis = 1)

相关问题 更多 >