Python 如何卸下';楠';不删除数据?

Python 如何卸下';楠';不删除数据?,python,pandas,numpy,dataframe,nan,Python,Pandas,Numpy,Dataframe,Nan,我正在尝试删除“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”

具体而言,一行和“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
是具有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]
我节省了索引时间来使用重采样时间

df_time_merge = df_concat.resample(index_time).mean()
“df_time_merge”的结果如下所示。

它起作用了

但是如果我有这样的数据(从Nan开始),代码就不起作用了

如果运行相同的代码,
start=0
end=0

我错过了哪里?

看看这个


df.dropna(args..)。这就是你想要的

如果已使用Pandas将数据加载到数据帧中,则可以使用
df.dropna()
, 其中,
df=pd.DataFrame()

您还可以传递如下参数:

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-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)

这是你想要的吗

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]])
创建一个数组,以标识哪些行不都是NAN

filt=1^np.isnan(test).all(axis=1)

In [78]: filt
Out[78]: array([1, 1, 0, 0, 1, 1, 0, 0])
使用tat数组将测试压缩到并非所有NAN的行

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.]])

我做到了。。。但这不是我想要的。好吧,你能更具体地说你想如何合并吗?另外,请张贴你想出的代码。这可能更容易理解问题。我添加了代码和一些结果。请查看错误所在。欢迎来到SO,我想问您是如何从
CSV
text
或其他类型导入数据集的?如果您使用的是csv或excel,则在处理时,您可以删除nan值,从而简化进一步处理。
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.]])