panda:从一个csv读取多个 Dataframe

bt1cpqcv  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(170)

我有一个csv文件,看起来像这样:

col A, col B
1, 5
2,7
78,65
###########
5,8
15,23
###########
17, 15
25,62
12,15
95,56

如何将其转换为一组 Dataframe ,#########行之间的每个区域一个(如果需要,我可以更改标记)?
结果应该是这样的:

df1 = {col A :{1,2,78}, col B: {5,7,65}}
df2 = {col A: {5,15}, col B: {8,23}}
df3 = {col A: {17,25,12,95}, col B: {15,62,15,56}}

我知道使用file.readlines()有一个变通方法,但它“不是很优雅”--我想知道是否有一种Pandas的方法可以直接做到这一点。

pokxtpni

pokxtpni1#

受piRSquared的答案here的启发,您可以像这样接近您的目标:

import pandas as pd
import numpy as np

df = pd.read_csv("/input_file.csv")

# is the row a horizontal delimiter ?
m = df["col A"].str.contains("#", na=False)

l_df = list(filter(lambda d: not d.empty, np.split(df, np.flatnonzero(m) + 1)))

_ = [exec(f"globals()['df{idx}'] = df.loc[~m]") for idx, df in enumerate(l_df, start=1)]
#if you need a dictionnary (instead of a dataframe), you can use df.loc[~m].to_dict("list")

NB:我们使用globals动态创建变量/子 Dataframe 。

#输出:
print(df1, type(df1)), print(df2, type(df2)), print(df3, type(df3))

  col A   col B
0     1     5.0
1     2     7.0
2    78    65.0 <class 'pandas.core.frame.DataFrame'>

  col A   col B
4     5     8.0
5    15    23.0 <class 'pandas.core.frame.DataFrame'>

   col A   col B
7     17    15.0
8     25    62.0
9     12    15.0
10    95    56.0 <class 'pandas.core.frame.DataFrame'>

相关问题