pandas:从一个csv中读取多个数据帧



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

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

如何将其转换为一组数据帧,在#########行之间的每个区域一个(如果需要,我可以更改标记)?

结果应该像这样:

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()的解决方案,但它"不是很优雅"。-我想知道是否有一种直接的方法。

深受piRSquared的回答这里的启发,您可以这样接近您的目标:

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

注意:我们使用globals动态创建变量/子数据帧。

# Output:
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'>

相关内容

  • 没有找到相关文章

最新更新