【发布时间】:2019-01-21 16:13:34
【问题描述】:
我正在尝试删除“NaN”。
详细来说,一行有数据,还有'NaN'。
我的数据如下所示。
01 02 03 04 05 06 07 08 09 10 ... 12 13 \
0 0.0 0.0 0.0 0.0 0.0 0.0 132.0 321.0 0.0 31.0 ... NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... 0.936 0.0
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
10 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
11 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
12 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
16 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
18 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
19 0.0 0.0 0.0 0.0 0.0 0.0 132.0 321.0 0.0 31.0 ... NaN NaN
20 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... 0.936 0.0
21 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
22 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
23 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
24 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
25 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
26 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
27 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
28 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
29 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
14 15 16 17 18 19 20 21
0 NaN NaN NaN NaN NaN NaN NaN NaN
1 8.984375 15.234375 646.25 0.0 0.0 9.765625 0.0 0.0
2 NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN
10 NaN NaN NaN NaN NaN NaN NaN NaN
11 NaN NaN NaN NaN NaN NaN NaN NaN
12 NaN NaN NaN NaN NaN NaN NaN NaN
13 NaN NaN NaN NaN NaN NaN NaN NaN
14 NaN NaN NaN NaN NaN NaN NaN NaN
15 NaN NaN NaN NaN NaN NaN NaN NaN
16 NaN NaN NaN NaN NaN NaN NaN NaN
17 NaN NaN NaN NaN NaN NaN NaN NaN
18 NaN NaN NaN NaN NaN NaN NaN NaN
19 NaN NaN NaN NaN NaN NaN NaN NaN
20 8.984375 15.234375 646.25 0.0 0.0 9.765625 0.0 0.0
21 NaN NaN NaN NaN NaN NaN NaN NaN
22 NaN NaN NaN NaN NaN NaN NaN NaN
23 NaN NaN NaN NaN NaN NaN NaN NaN
24 NaN NaN NaN NaN NaN NaN NaN NaN
25 NaN NaN NaN NaN NaN NaN NaN NaN
26 NaN NaN NaN NaN NaN NaN NaN NaN
27 NaN NaN NaN NaN NaN NaN NaN NaN
28 NaN NaN NaN NaN NaN NaN NaN NaN
29 NaN NaN NaN NaN NaN NaN NaN NaN
[30 rows x 21 columns]
我想消除数据之间的NAN,每18行做一个数据。
01 02 03 04 05 06 07 08 09 10 ... 12 13 \
0 0.0 0.0 0.0 0.0 0.0 0.0 132.0 321.0 0.0 31.0 ... 0.936 0.0
1 0.0 0.0 0.0 0.0 0.0 0.0 132.0 321.0 0.0 31.0 ... 0.936 0.0
14 15 16 17 18 19 20 21
0 8.984375 15.234375 646.25 0.0 0.0 9.765625 0.0 0.0
1 8.984375 15.234375 646.25 0.0 0.0 9.765625 0.0 0.0
我尝试了选项 'dropna()'(使用 'how = 'all'' 或 'thread = '10'')。
但这些不是我想要的。
如何删除 NaN 并合并数据?
添加
这是我使用的代码(python2)。
df_concat = []
for j in range(len(data_file)):
print("%s data_file_concat %s %s of %s finished" % (Driver, data_file[j], j, len(data_file)))
x = pd.read_csv(data_file[j])
if len(df_concat) != 0:
df_concat = [df_concat, x]
df_concat = pd.concat(df_concat, sort=False)
else:
df_concat = x
print("%s df_concat %s of %s finished" %(Driver,j,len(df_concat)))
df_concat 是具有 NaN 的数据。
如果看数据的话,1到10有第0行的数据,11到21有第1行的数据。
即有两行数据。
我想把它换成一行,不带 NaN。
01 02 03 04 05 06 07 08 09 10 ... 12 13 \
0 0.0 0.0 0.0 0.0 0.0 0.0 132.0 321.0 0.0 31.0 ... 0.936 0.0
1 0.0 0.0 0.0 0.0 0.0 0.0 132.0 321.0 0.0 31.0 ... 0.936 0.0
14 15 16 17 18 19 20 21
0 8.984375 15.234375 646.25 0.0 0.0 9.765625 0.0 0.0
1 8.984375 15.234375 646.25 0.0 0.0 9.765625 0.0 0.0
喜欢这个结果。
我尝试重新索引该行以使用重采样。
df_concat.index = pd.to_datetime(df_concat.index, unit='s')
df_concat_colums=df_concat.columns
start = None
end = None
for i in range(len(df_concat[df_concat_colums[0]])):
if ~pd.isnull(df_concat[df_concat_colums[0]][i]):
if start == None:
start = i
elif end == None:
end = i-1
break
我保存开始和结束索引。
index_time = df_concat['01'].index[end] - df_concat['01'].index[start]
我保存 index_time 以使用重采样时间。
df_time_merge = df_concat.resample(index_time).mean()
'df_time_merge'的结果是这样的。 enter image description here
它正在工作!
但如果我有这样的数据(以 Nan 开头),则代码不起作用。
如果我运行相同的代码,start = 0 和 end = 0。
我错过了什么?
【问题讨论】:
-
欢迎来到 SO,我想问一下您是如何从
CSV、text或其他类型导入数据集的?如果您使用的是 csv 或 excel,那么在处理时您可以删除 nan 值,这使得进一步处理变得容易。
标签: python pandas numpy dataframe nan