提取子数据帧

2024-04-27 04:17:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Pandas中有这样的数据帧:

NaN
1
NaN
452
1175
12
NaN
NaN
NaN
145
125
NaN
1259
2178
2514
1

另一方面,我有另一个数据帧:

^{2}$

我想将第一个分为不同的子数据帧,如下所示:

DataFrame 1:
  1
DataFrame 2:
  452
  1175
  12
DataFrame 3:

DataFrame 4:

DataFrame 5:
  145
  125
DataFrame 6:
  1259
  2178
  2514
  1

没有循环我怎么能做到呢?在


Tags: 数据dataframepandasnan
2条回答
w = np.append(np.where(np.isnan(df.iloc[:, 0].values))[0], len(df))
splits = {'DataFrame{}'.format(c): df.iloc[i+1:j]
          for c, (i, j) in enumerate(zip(w, w[1:]))}

打印splits以演示

^{pr2}$

更新:感谢@piRSquared指出上面的解决方案不适用于具有非数字索引的DFs/Series。以下是更通用的解决方案:

dfs = [x.dropna()
       for x in np.split(df, np.arange(len(df))[df['column'].isnull().values])]

旧答案:

你可以这样做:

源数据源:

^{pr2}$

解决方案:

In [31]: dfs = [x.dropna()
                for x in np.split(df, df.index[df['column'].isnull()].values+1)]

In [32]: dfs[0]
Out[32]:
Empty DataFrame
Columns: [column]
Index: []

In [33]: dfs[1]
Out[33]:
   column
1     1.0

In [34]: dfs[2]
Out[34]:
   column
3   452.0
4  1175.0
5    12.0

In [35]: dfs[3]
Out[35]:
Empty DataFrame
Columns: [column]
Index: []

In [36]: dfs[4]
Out[36]:
Empty DataFrame
Columns: [column]
Index: []

In [37]: dfs[4]
Out[37]:
Empty DataFrame
Columns: [column]
Index: []

In [38]: dfs[5]
Out[38]:
    column
9    145.0
10   125.0

In [39]: dfs[6]
Out[39]:
    column
12  1259.0
13  2178.0
14  2514.0
15     1.0

相关问题 更多 >