我正在尝试删除“ 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的数据。
如果查看数据,则第0行中的数据是1到10,第1行中的数据是11到21。
也就是说,有两行数据。
我想将其包装在没有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
。
我想念哪里?
答案 0 :(得分:1)
如果您已使用熊猫将数据加载到数据框中,则可以使用df.dropna()
,
其中df = pd.DataFrame(<your_data_here>)
还可以传递如下参数:
df.dropna(how='any') #to drop if any value in the row has a nan
df.dropna(how='all') #to drop if all values in the row are nan
答案 1 :(得分:0)
看看这个。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html
df.dropna(args ..)。是你所追求的。
答案 2 :(得分:0)
您的完整解决方案如下: 确保您的数据框结构是规则的。
首先,将数据框的列分为两部分。在您的情况下1-11、12-21。
your_df=pd.read_csv(...)
columns1=list(range(12))
columns2=list(range(12,22))
df1=your_df[columns1].dropna()
df2=your_df[columns2].dropna().reset_index(drop=True)
df_new=pd.concat([df2,df3], axis=1)
答案 3 :(得分:0)
这是您想要的吗?
def make_sample():
test=np.full((8,12), np.nan)
test[0,:6]=np.arange(6)
test[1,6:]=np.arange(6,18,2)
test[4:6,:]=2*test[:2,:]
return test
test=make_sample()
In [74]: test
Out[74]:
array([[ 0., 1., 2., 3., 4., 5., nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, 6., 8., 10., 12., 14., 16.],
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
[ 0., 2., 4., 6., 8., 10., nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, 12., 16., 20., 24., 28., 32.],
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]])
创建一个数组以识别哪些行不是全部nans
filt=1^np.isnan(test).all(axis=1)
In [78]: filt
Out[78]: array([1, 1, 0, 0, 1, 1, 0, 0])
使用tat数组将测试压缩到并非全部为nans的行
compress=np.compress(filt, test, axis=0)
In [80]: compress
Out[80]:
array([[ 0., 1., 2., 3., 4., 5., nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, 6., 8., 10., 12., 14., 16.],
[ 0., 2., 4., 6., 8., 10., nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, 12., 16., 20., 24., 28., 32.]])
将nans设置为零
compress[np.isnan(compress)]=0
In [83]: compress
Out[83]:
array([[ 0., 1., 2., 3., 4., 5., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 6., 8., 10., 12., 14., 16.],
[ 0., 2., 4., 6., 8., 10., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 12., 16., 20., 24., 28., 32.]])
将奇数行添加到偶数行
In [84]: compress[::2,:]+compress[1::2,:]
Out[84]:
array([[ 0., 1., 2., 3., 4., 5., 6., 8., 10., 12., 14., 16.],
[ 0., 2., 4., 6., 8., 10., 12., 16., 20., 24., 28., 32.]])