首页 > 解决方案 > 如何使用python pandas在excel文档中的行和列中删除没有浮动的行

问题描述

我正在编辑一个 excel 文件,我到了这一点,我试图删除所有没有数字的行。如下所示:


   drinks|  period| Day1|   Day2|   Day3|   Day4|   Day5|   Day6|

1   Beer1|  weekly|                     
5   Beer2|  weekly|                     
9   Beer3|  weekly| 8.0 |    6.6|    4.8|    6.9|    8.3|    8.5|

10  Beer4|  Monthly 8.0 |    6.9|    5.8|    6.7|    6.8|    6.7|

11  Beer5|  quaterly|7.3|    7.3|    7.3|    7.3|    7.3|    7.3|

13  Beer6|  weekly|                     
17  Beer7|  weekly|                     
21  Beer8|  weekly|                     
25  Beer9|  weekly|                     
29  Beer0|  weekly|          8.2|           
33  Beer1|  weekly| 6.2|                    
34  Beer2|  weekly| 6.2|     6.2|     6.2|   6.2|     6.3|    6.3|

35  Beer3|  Month | 5.4|     5.4|     5.4|   5.4|     5.4|    5.4|

37  Beer4|  weekly|                     
41  Beer5|  weekly|          8.3|     8.2|   8.2|

42  Beer6|  weekly|                          8.5|


45  Beer7|  weekly|                     
49  Beer8|  weekly|                   8.5|      
53  Beer9|  weekly|                          8.2|

我一直得到错误的结果。有人可以帮忙吗?

import pandas as pd

import numpy as np

excel_file_1 = 'DRINKS.xlsx'
df = pd.read_excel(excel_file_1)

df.dropna(axis=0,how='all')

print (df)

我试图删除除带有浮动的行之外的每一行。注意带有浮动的行也有字符串,预期结果应该是:

    drinks| period| Day1|   Day2|   Day3|   Day4|   Day5|   


9   Beer3|  weekly| 8.0|    6.6|    4.8|    6.9|    8.3|    
10  Beer4|  Monthly|8.0|    6.9|    5.8|    6.7|    6.8|    
11  Beer5|  quaterly|7.3|   7.3|    7.3|    7.3|    7.3|

29  Beer1|  weekly|         8.2 |                
33  Beer2|  weekly| 6.2|                             
34  Beer3|  weekly| 6.2|    6.2|    6.2|    6.2|    6.3|    
35  Beer4|  Monthly|5.4|    5.4|    5.4|    5.4|    5.4|    
41  Beer5|  weekly| 8.3|    8.2|    8.2|         
42  Beer6| weekly|                      8.5 8.5  
49  Beer8|  weekly|             8.5              
53  Beer9|  weekly|                     8.2 8.4  

标签: excelpython-3.xpandas

解决方案


你可以试试这个

m=df.stack().str.contains('\d').any(level=0)
n=df.stack().str.contains('\w+').all(level=0)
df[m|n]

输出

    drink   cost    places    sold
2   beer                 2      6
3   pepsi   4.5     New Jersy   2
4   Fruit   3       Vancouver   Nan

推荐阅读