为每个头部制作单独的数据帧

2024-09-30 05:26:09 发布

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

所以我有一个csv,它每天都包含由一个标题分隔的数据。不管怎样,每次程序点击一个标题时,我都可以单独创建一个dfs吗?你知道吗

数据基本上是这样的

#dateinformation
data1, data2, data3
data4, data5, data6
#dateinformation

真正的csv的一个例子是

#7240320140101002301 131
21101400B   86    12B  110  325   25
10100000   200B    6B  110  325   77
20 95300 -9999   -27B  100-9999-9999
10 92500   820B  -39B   90  290
.....
#7240320140102002301
21101400B   86    14B  110  325   25
10100000   200B    2B  110  325   77
20 95300 -9999   -85B  100-9999-9999
10 92500   820B  -25B   90  290

我已经把实际数据的格式准备好了。我只是需要一些帮助,如何在csv中分离出不同的集合


Tags: csv数据程序标题格式例子dfsdata1
2条回答

这个答案是基于每个“帧”包含相同行数的假设

首先我们用pandas read_csv()读取文件。我们利用comment参数省略每个标题,只读入数据

df = pd.read_csv('data.txt', comment='#', delim_whitespace=True, header=None)
df

    0           1   2   3   4   5
0   21101400B   86  12B 110 325 25
1   10100000    200B    6B  110 325 77
2   20  95300   -9999   -27B    100-9999-9999   NaN
3   10  92500   820B    -39B    90  290
4   21101400B   86  14B 110 325 25
5   10100000    200B    2B  110 325 77
6   20  95300   -9999   -85B    100-9999-9999   NaN
7   10  92500   820B    -25B    90  290

然后使用for循环来解析每个帧并将其存储在一个列表中。我假设行数=4

frames = []
for begin in range(0,len(df),4): 
    frames.append(df[begin:begin+4])
frames[0]

    0           1   2   3   4   5
0   21101400B   86  12B 110 325 25
1   10100000    200B    6B  110 325 77
2   20  95300   -9999   -27B    100-9999-9999   NaN
3   10  92500   820B    -39B    90  290

(以下代码基于以“#”开头的标题行)

我想在理论上你应该用read\u table和chunksize来做这个,但是在实践中,由于每行字段的数量不同,我很难让它很好地工作。下面是相当简单的,但我不得不求助于ItErrors。你知道吗

In [1435]: df_list = []
      ...: df = pd.DataFrame()
      ...: j = 0
      ...: foo = pd.read_csv('foo.txt',sep=' *',names=list('abcdef'))
      ...: for i, row in foo.ix[1:].iterrows():
      ...:     if row[0][0] == '#':
      ...:         df_list.append(df)
      ...:         df = pd.DataFrame()
      ...:     else:
      ...:         df = df.append(row)
      ...: df_list.append(df)

In [1436]: df_list[0]
Out[1436]: 
           a      b      c     d              e    f
1  21101400B     86    12B   110            325   25
2   10100000   200B     6B   110            325   77
3         20  95300  -9999  -27B  100-9999-9999  NaN
4         10  92500   820B  -39B             90  290

In [1437]: df_list[1]
Out[1437]: 
           a      b      c     d              e    f
6  21101400B     86    14B   110            325   25
7   10100000   200B     2B   110            325   77
8         20  95300  -9999  -85B  100-9999-9999  NaN
9         10  92500   820B  -25B             90  290

相关问题 更多 >

    热门问题