当前位置: 首页 > 知识库问答 >
问题:

为什么dropna()会删除额外的行?

姚德容
2023-03-14

我想删除至少有一个“NaN”的所有行。数据框如下图所示,但实际的数据框大约有1000004行。

完整的CSV文件:文件

我写的代码如下:

def fft(x, Plot_ShareY=True):

    #loads the csv files 
    dfs = pd.read_csv(x, delimiter=";", skiprows=(1,2), decimal=",", na_values='NaN')
 
    #removes spaces in column names   
    dfs = pd.DataFrame(dfs)  
    dfs.columns = dfs.columns.str.replace(' ', '') #removes spaces from col names
    
    #removes infinity symbol and converts non-numeric values to NaN
    for c in dfs:
        dfs[c] = pd.to_numeric(dfs[c], errors='coerce') 
    
    #drops NaN
    dfs = dfs.dropna(axis=0, how='any')
    print(dfs)     

我预计至少有300000行,但我只有大约200000行。当我签入实际的CSV文件时,第一个NaN至少在第380000行之前不会出现。那么,为什么dropna()删除多余的行?

共有3个答案

缑文栋
2023-03-14

您可以将堆栈取消堆栈与向量化的str.replace一起使用,将转换为 完成以下操作:

dfs = pd.read_csv("Pipe03_2.csv", delimiter=";", skiprows=(1,2), decimal=",", na_values=['(NA)'], low_memory=False)
dfs = dfs.rename(columns=lambda x: x.strip())
dfs = dfs.replace({'-∞': np.nan, '∞': np.nan})
dfs = dfs.dropna(axis=0, how='any')

dfs = dfs[['Channel A', 'Channel B', 'Channel C', 'Channel D']].stack().str.replace(',','.').unstack()
#dfs = dfs[['Channel A', 'Channel B', 'Channel C', 'Channel D']].stack().str.replace(',','.').unstack().astype(float)   <-- this change the datatype to float

或者只是为了方便一点,您可以定义列名,运行替换函数。

cols = ['Channel A', 'Channel B', 'Channel C', 'Channel D']
dfs = dfs[cols].stack().str.replace(',','.').unstack()

dfs = dfs.loc[:, dfs.columns != 'Time'].stack().str.replace(',','.').unstack()

dfs = dfs[dfs.columns.difference(['Time'])].stack().str.replace(',','.').unstack()

dfs = dfs.loc[:, ~dfs.columns.isin(['Time'])].stack().str.replace(',','.').unstack()

dfs = dfs[dfs.columns.drop('Time')].stack().str.replace(',','.').unstack()

dfs = dfs.drop('Time', axis=1).stack().str.replace(',','.').unstack()
# dfs = dfs.drop(columns='Time').stack().str.replace(',','.').unstack()

dfs。总目()

        Time  Channel A  Channel B  Channel C  Channel D
0 -20.000096  -0.366256  -1.098767   0.000000  -0.366256
1 -20.000046  -0.366256  -1.465022  -0.366256   0.305213
2 -19.999996   0.305213  -0.732511   0.000000  -0.366256
3 -19.999946  -0.366256  -1.098767   0.000000   0.000000
4 -19.999896   0.671469  -0.366256   0.305213   0.000000

dfs.tail()

             Time  Channel A  Channel B  Channel C  Channel D
944234  27.211601  -358.7474   499.8168  -169.2101  -236.1738
944237  27.211751  -358.7474   499.8168  -169.5764  -235.4413
944239  27.211851  -358.7474   499.8168  -169.9426  -235.8076
944240  27.211901  -358.7474   499.8168  -170.3089  -235.8076
944241  27.211951  -359.1136   499.8168  -170.3089  -236.1738

在彻底读取csv文件并查看数据的同时,这需要在开始时进行清理。

excel文件(ms)下面有5列;(mV);(mV);(mV);(mV)用于某种导电性测量。。。

dfs = pd.read_csv("Pipe03_2.csv", skiprows=(0,1,2), sep=',',names=['Numbers','Time','Channel A','Channel B','Channel C','Channel D'], dtype='unicode')
dfs = dfs.dropna(axis=0, how='any')
print(dfs.head(200))
       Numbers           Time      Channel A      Channel B      Channel C Channel D
0          -20    00009598;-0    36625560;-1     09876700;0    00000000;-0  36625560
1          -20    00004598;-0    36625560;-1    46502200;-0     36625560;0  30521300
2          -19     99999598;0    30521300;-0     73251120;0    00000000;-0  36625560
3          -19    99994598;-0    36625560;-1     09876700;0     00000000;0  00000000
4          -19     99989598;0    67146860;-0     36625560;0     30521300;0  00000000
5          -19    99984598;-0    73251120;-0     73251120;0     00000000;0  00000000
6          -19     99979598;0    00000000;-0     73251120;0     00000000;0  00000000
7          -19    99974598;-0    36625560;-1     09876700;0    00000000;-0  36625560
8          -19     99969598;0    00000000;-1    09876700;-0    36625560;-0  36625560
9          -19    99964598;-0    36625560;-0    73251120;-0    36625560;-0  36625560
10         -19    99959598;-0    73251120;-0    73251120;-0    36625560;-0  36625560
11         -19     99954598;0    30521300;-0     73251120;0     00000000;0  00000000
12         -19     99949598;0    00000000;-0     73251120;0     00000000;0  30521300
13         -19     99944598;0    30521300;-0     36625560;0     30521300;0  30521300
14         -19     99939598;0    00000000;-1     09876700;0     00000000;0  00000000
15         -19     99934598;0    30521300;-0     73251120;0     00000000;0  00000000
16         -19     99929598;0    00000000;-1     09876700;0    00000000;-0  36625560
17         -19     99924598;0    30521300;-1     09876700;0    00000000;-0  36625560
18         -19     99919598;0    30521300;-0    73251120;-0    36625560;-0  36625560
19         -19     99914598;0    00000000;-0     36625560;0     30521300;0  30521300
20         -19     99909598;0    30521300;-1     09876700;0     00000000;0  30521300
21         -19    99904598;-0    36625560;-0    36625560;-0     36625560;0  00000000
22         -19     99899598;0    00000000;-1     09876700;0     00000000;0  00000000
23         -19    99894598;-0    36625560;-0    73251120;-0     36625560;0  67146860
24         -19    99889598;-0    73251120;-1     46502200;0    00000000;-0  36625560
25         -19     99884598;0    30521300;-1    09876700;-0    73251120;-0  36625560
26         -19     99879598;0    00000000;-0    36625560;-0     36625560;0  30521300
27         -19     99874598;0    00000000;-1     09876700;0    00000000;-0  36625560
28         -19     99869598;0    30521300;-0    73251120;-0    73251120;-0  36625560
29         -19     99864598;0    00000000;-0    36625560;-0    36625560;-0  36625560
30         -19    99859598;-0    36625560;-0     36625560;0     00000000;0  00000000
31         -19    99854598;-0    36625560;-1    09876700;-0     36625560;0  00000000
32         -19     99849598;0    67146860;-1    09876700;-0    36625560;-0  36625560
33         -19     99844598;0    00000000;-0     73251120;0     30521300;0  67146860
34         -19     99839598;0    67146860;-0     36625560;0     30521300;0  30521300
35         -19     99834598;0    00000000;-0    36625560;-0     36625560;0  00000000
36         -19     99829598;0    00000000;-1     09876700;0     00000000;0  00000000
37         -19     99824598;0    00000000;-0    73251120;-1     09876700;0  00000000
38         -19     99819598;0    30521300;-1    09876700;-0    36625560;-0  73251120
39         -19    99814598;-0    73251120;-0    36625560;-0     36625560;0  00000000
40         -19    99809598;-0    36625560;-0    73251120;-0    36625560;-0  36625560
41         -19     99804598;0    00000000;-0    36625560;-0    36625560;-0  36625560
42         -19    99799598;-0    36625560;-1    09876700;-0     36625560;0  00000000
43         -19     99794598;0    30521300;-0     36625560;0     00000000;0  00000000
44         -19     99789598;0    00000000;-0     73251120;0     00000000;0  00000000
45         -19    99784598;-0    73251120;-0    73251120;-0     73251120;0  30521300
46         -19     99779598;0    00000000;-1    09876700;-0    73251120;-0  36625560
47         -19     99774598;0    30521300;-1     46502200;0    67146860;-0  73251120
48         -19     99769598;0    00000000;-0     36625560;0    00000000;-0  36625560
49         -19     99764598;0    30521300;-1     09876700;0     00000000;0  00000000
50         -19     99759598;0    00000000;-0     73251120;0    00000000;-0  36625560
51         -19     99754598;0    00000000;-0     36625560;0     00000000;0  00000000
52         -19     99749598;0    00000000;-0     73251120;0     30521300;0  00000000
53         -19     99744598;0    00000000;-0    73251120;-0    73251120;-0  36625560
54         -19     99739598;0    30521300;-1    09876700;-0     36625560;0  00000000
55         -19     99734598;0    00000000;-1    09876700;-0     36625560;0  00000000
56         -19     99729598;0    00000000;-0    36625560;-0     73251120;0  00000000
57         -19     99724598;0    30521300;-0     73251120;0     00000000;0  30521300
58         -19     99719598;0    30521300;-0    73251120;-0     36625560;0  30521300
59         -19     99714598;0    00000000;-0    36625560;-0     36625560;0  00000000
60         -19     99709598;0    30521300;-0     73251120;0     00000000;0  00000000
61         -19     99704598;0    30521300;-0     73251120;0     00000000;0  00000000
62         -19     99699598;0    00000000;-0     73251120;0    00000000;-0  36625560
63         -19    99694598;-0    36625560;-0    73251120;-0     36625560;0  00000000
64         -19     99689598;0    30521300;-0     73251120;0     00000000;0  00000000
65         -19     99684598;0    00000000;-0     73251120;0     00000000;0  30521300
66         -19     99679598;0     30521300;0     00000000;0     30521300;0  00000000
67         -19    99674598;-0    36625560;-0    73251120;-0     36625560;0  00000000
68         -19     99669598;0    00000000;-1     46502200;0     00000000;0  00000000
69         -19     99664598;0    00000000;-0     36625560;0     30521300;0  00000000
70         -19     99659598;0    00000000;-0    73251120;-0     36625560;0  00000000
71         -19    99654598;-0    73251120;-1     46502200;0    00000000;-0  36625560
72         -19     99649598;0    00000000;-0    73251120;-0    73251120;-0  36625560
73         -19     99644598;0    30521300;-0     73251120;0    30521300;-0  36625560
74         -19    99639598;-0    36625560;-0     36625560;0     00000000;0  30521300
75         -19    99634598;-0    36625560;-0     73251120;0     00000000;0  00000000
76         -19     99629598;0    00000000;-0    73251120;-0     36625560;0  67146860
77         -19     99624598;0    30521300;-1     46502200;0    00000000;-0  36625560
78         -19     99619598;0    30521300;-0    36625560;-0     73251120;0  30521300
79         -19     99614598;0    67146860;-1     09876700;0     30521300;0  67146860
80         -19    99609598;-0    36625560;-1    46502200;-0     36625560;0  00000000
81         -19     99604598;0    30521300;-0    73251120;-0     73251120;0  30521300
82         -19     99599598;0    30521300;-0     36625560;0     67146860;0  30521300
83         -19    99594598;-0    36625560;-0     36625560;0     00000000;0  00000000
84         -19     99589598;0    30521300;-0     36625560;0     30521300;0  00000000
85         -19     99584598;0    00000000;-0    73251120;-0     36625560;0  00000000
86         -19     99579598;0    00000000;-0     73251120;0     30521300;0  00000000
87         -19     99574598;0    30521300;-1     09876700;0    00000000;-0  73251120
88         -19     99569598;0    00000000;-0    73251120;-0     36625560;0  00000000
89         -19     99564598;0     00000000;0     00000000;0    00000000;-0  36625560
90         -19     99559598;0    30521300;-1     09876700;0    00000000;-0  73251120
91         -19     99554598;0    30521300;-0     36625560;0     00000000;0  67146860
92         -19     99549598;0    00000000;-0     73251120;0     00000000;0  30521300
93         -19    99544598;-0    36625560;-0    36625560;-0     36625560;0  00000000
94         -19     99539598;0    00000000;-0    73251120;-0    73251120;-0  36625560
95         -19    99534598;-0    36625560;-1     09876700;0    00000000;-0  36625560
96         -19    99529598;-0    36625560;-1    09876700;-0     36625560;0  00000000
97         -19     99524598;0    00000000;-0     73251120;0     00000000;0  00000000
98         -19    99519598;-0    36625560;-0    73251120;-0     36625560;0  00000000
99         -19     99514598;0    30521300;-0     73251120;0     00000000;0  30521300
100        -19    99509598;-0    36625560;-0    73251120;-0     73251120;0  00000000

------------------------ 剪掉 --------------------------------

如果想摆脱任何东西后;*包括,那么你可以使用下面...

dfs = pd.read_csv("Pipe03_2.csv", skiprows=(0,1,2), sep=',',names=['Numbers','Time','Channel A','Channel B','Channel C','Channel D'], dtype='unicode')
dfs = dfs.dropna(axis=0, how='any')
dfs['Time'] = dfs['Time'].str.split(";", expand=True, n=1)[0]
dfs['Channel A'] = dfs['Channel A'].str.split(";", expand=True, n=1)[0]
dfs['Channel B'] = dfs['Channel B'].str.split(";", expand=True, n=1)[0]
dfs['Channel C'] = dfs['Channel C'].str.split(";", expand=True, n=1)[0]
dfs['Channel D'] = dfs['Channel D'].str.split(";", expand=True, n=1)[0]
# or in single lambda function
# dfs = dfs.apply(lambda x: x.str.split(";", expand=True, n=1)[0])

重新查找结果:

   Numbers      Time Channel A Channel B Channel C Channel D
0      -20  00009598  36625560  09876700  00000000  36625560
1      -20  00004598  36625560  46502200  36625560  30521300
2      -19  99999598  30521300  73251120  00000000  36625560
3      -19  99994598  36625560  09876700  00000000  00000000
4      -19  99989598  67146860  36625560  30521300  00000000
5      -19  99984598  73251120  73251120  00000000  00000000
6      -19  99979598  00000000  73251120  00000000  00000000
7      -19  99974598  36625560  09876700  00000000  36625560
8      -19  99969598  00000000  09876700  36625560  36625560
9      -19  99964598  36625560  73251120  36625560  36625560
10     -19  99959598  73251120  73251120  36625560  36625560
11     -19  99954598  30521300  73251120  00000000  00000000
12     -19  99949598  00000000  73251120  00000000  30521300
13     -19  99944598  30521300  36625560  30521300  30521300
14     -19  99939598  00000000  09876700  00000000  00000000
15     -19  99934598  30521300  73251120  00000000  00000000
16     -19  99929598  00000000  09876700  00000000  36625560
17     -19  99924598  30521300  09876700  00000000  36625560
18     -19  99919598  30521300  73251120  36625560  36625560
19     -19  99914598  00000000  36625560  30521300  30521300
20     -19  99909598  30521300  09876700  00000000  30521300

仅显示在给定数据集上测试的简化和提取版本:

只需在feed期间将数据清理为max。。。

dfs = pd.read_csv("Pipe03_2.csv", skiprows=(0,1,2), sep=',',names=['Numbers','Time','Channel A','Channel B','Channel C','Channel D'], dtype='unicode')
dfs = dfs.dropna(axis=0, how='any')
dfs = dfs.apply(lambda x: x.str.split(";", expand=True, n=1)[0])
   Numbers      Time Channel A Channel B Channel C Channel D
0      -20  00009598  36625560  09876700  00000000  36625560
1      -20  00004598  36625560  46502200  36625560  30521300
2      -19  99999598  30521300  73251120  00000000  36625560
3      -19  99994598  36625560  09876700  00000000  00000000
4      -19  99989598  67146860  36625560  30521300  00000000
5      -19  99984598  73251120  73251120  00000000  00000000
6      -19  99979598  00000000  73251120  00000000  00000000
7      -19  99974598  36625560  09876700  00000000  36625560
8      -19  99969598  00000000  09876700  36625560  36625560
9      -19  99964598  36625560  73251120  36625560  36625560
10     -19  99959598  73251120  73251120  36625560  36625560
11     -19  99954598  30521300  73251120  00000000  00000000
12     -19  99949598  00000000  73251120  00000000  30521300
13     -19  99944598  30521300  36625560  30521300  30521300
14     -19  99939598  00000000  09876700  00000000  00000000
15     -19  99934598  30521300  73251120  00000000  00000000
16     -19  99929598  00000000  09876700  00000000  36625560
17     -19  99924598  30521300  09876700  00000000  36625560
18     -19  99919598  30521300  73251120  36625560  36625560
19     -19  99914598  00000000  36625560  30521300  30521300
20     -19  99909598  30521300  09876700  00000000  30521300

狄新翰
2023-03-14

您的单元格值不正确。您必须在将数据转换为数字之前清除数据

dfs = dfs.loc[0:380_000].copy()
for c in dfs:
    dfs[c] = dfs[c].astype(float)

#drops NaN
dfs = dfs.dropna(axis=0, how='any')
print(dfs)    
冯星阑
2023-03-14

我使用pd采用了不同的方法。对数值(dfs[c],errors='compresse')在我的测试中使其全部Nan,并在应用dfs时返回空数据帧。dropna(axis=0,how='any'),所以最好用它来替换符号(

在修剪所有空白的同时,最好使用strip删除所有列的两端空间。

您将得到387060行。

dfs = pd.read_csv("Pipe03_2.csv", delimiter=";", skiprows=(1,2), decimal=",", na_values=['(NA)'], low_memory=False)
dfs = dfs.rename(columns=lambda x: x.strip())
dfs = dfs.replace({'-∞': np.nan, '∞': np.nan})
dfs = dfs.dropna(axis=0, how='any')
print(dfs)
dfs.head()

        Time    Channel A    Channel B    Channel C    Channel D
0 -20.000096  -0,36625560  -1,09876700   0,00000000  -0,36625560
1 -20.000046  -0,36625560  -1,46502200  -0,36625560   0,30521300
2 -19.999996   0,30521300  -0,73251120   0,00000000  -0,36625560
3 -19.999946  -0,36625560  -1,09876700   0,00000000   0,00000000
4 -19.999896   0,67146860  -0,36625560   0,30521300   0,00000000

dfs.tail()
             Time      Channel A     Channel B      Channel C      Channel D
944234  27.211601  -358,74740000  499,81680000  -169,21010000  -236,17380000
944237  27.211751  -358,74740000  499,81680000  -169,57640000  -235,44130000
944239  27.211851  -358,74740000  499,81680000  -169,94260000  -235,80760000
944240  27.211901  -358,74740000  499,81680000  -170,30890000  -235,80760000
944241  27.211951  -359,11360000  499,81680000  -170,30890000  -236,17380000

 类似资料:
  • 问题内容: path = “/Volumes/Users” >>> path.lstrip(‘/Volume’) ‘s/Users’ >>> path.lstrip(‘/Volumes’) ‘Users’ >>> 我期望的输出是 问题答案: 是基于字符的,它将删除该字符串中左端的所有字符。 要验证这一点,请尝试以下操作: 由于是字符串的一部分,因此将其删除。 您需要改用切片: 或者,在Python

  • 问题是 有一个输入字符串集合和一个查询字符串集合。对于每个查询字符串,确定它在输入字符串列表中出现的次数。 字符串=[ab,ab,abc]查询=[ab,abc,bc]有ab的实例2,'abc'的实例1和'bc'的实例0。对于每个查询,添加一个元素。 现在我尝试使用链表实现它,但不是以2,1,0的形式获得输出。我得到的输出是2,1,0,2,2,1,0,2。我不知道是如何为超过3个链接创建LL的。请帮

  • 我有一个5页的pdf文件,每页有一个表,我需要提取。我需要从每一页提取所有的表,并将它们保存为数据帧文件,所有使用python,所以我转换了文件,使用tabula的csv文件 文件输出的主要问题。csv是指有几个额外的逗号。 实例 当我将csv文件转换成行/列时,我得到了一些行偏移 注意:dataframe应该有6列,其中包含空字段。我猜额外的逗号来自pdf文件中的空格。如何从csv文件中删除额外

  • 这里是一个新的Python编码器,有相当多的C#经验。我试图用Python来完成这个练习: 国际象棋字典验证器在本章中,我们使用字典值{'1h':'bking','6c':'wqueen','2g':'bbishop','5h':'bqueen','3e':'wking'}来表示国际象棋棋盘。编写一个名为isValidChessBoard()的函数,它接受一个字典参数,并根据板是否有效返回True

  • 我发现这个问题在堆栈溢出和其他站点上也得到了回答。我尝试了所有的选择,但它们都是空白。我的tableview中有4个原型单元格。在故事板上,第四个单元格后没有空格。但在执行时,我发现第四排后面有空白。第四排之后,它们不再是分隔符,但空白的白色仍然是它们的。我尝试添加以下代码: 为了使整个视图看起来合适,我为视图和tableview设置了相同的背景色。除了这个白色区域之外,其他一切看起来都正常, 有

  • 我只是在应用程序的pom.xml中添加了一个spring-boot-starter-actuctor依赖项。生成并运行项目后,/healthendpoint显示下一个信息: 如何从响应中删除“详细信息”部分?