我想删除至少有一个“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()
删除多余的行?
您可以将堆栈
和取消堆栈
与向量化的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
您的单元格值不正确。您必须在将数据转换为数字之前清除数据
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)
我使用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显示下一个信息: 如何从响应中删除“详细信息”部分?