Python 如何卸下';楠';不删除数据?
我正在尝试删除“NaN” 具体而言,一行和“NaN”上有数据 我的数据如下所示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
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.]])