Excel到Panda,空白作为行delimeter



我有一些格式错误的Excel数据,如下所示:

aaaa
bbbb
cccc

aaaa
bbbb
cccc
dddd

有没有一种合适的方法,使用空白作为分隔符,将每个片段变成一个带有默认值的panda行,以修复混乱?

我希望最终结果是这样的:

aaaa bbbb cccc "" 
aaaa bbbb cccc dddd

谢谢!

我想我能够通过将列作为列表,然后尝试拉出由任意数量的''值分隔的列表的每个部分来获得一些有效的东西。也许有更好的方法来做这些事情,但也许这个想法是有帮助的(至少对我的例子来说是有效的(。

我在这里使用的样本数据和你的一样,最后还有一小块。希望我理解得对。

l = ['aaaa',
'bbbb',
'cccc',
'',
'',
'',
'aaaa',
'bbbb',
'cccc',
'dddd',
'',
'asdf',
'badfd'
]

对于该列表l,其思想是在列表中循环查找''项目的数量,并提取lastspace(最后一个空格值(和thisspace(当前空格值(之间的项目。

当一行中有多个''值时,需要进行一些特殊处理。这就是while thisspace == lastspace+1...片段,如果发生这种情况,它将跳过它并转到下一个''值。因此,当我们找到这些连续值时,我们希望增加循环计数器,因此我们的循环也必须是while循环,而不是for循环(不能处理手动增量(。

l.index()找不到子字符串时,它会给出ValueError,因此当我们超过最后一个''时,我们需要这种错误处理。

d = []
lastspace = -1
i = 0
while i <= l.count(''):
try:
thisspace = l.index('',lastspace+1)
while thisspace == lastspace+1:
lastspace = thisspace
thisspace = l.index('',lastspace+1)
i += 1    
d.append(l[lastspace+1:thisspace])
lastspace = thisspace
i += 1
except ValueError:
d.append(l[lastspace+1:])
i += 1
df = pd.DataFrame(d)

我最后得到的数据帧是这样的:

0      1     2     3
0  aaaa   bbbb  cccc  None
1  aaaa   bbbb  cccc  dddd
2  asdf  badfd  None  None

我使用了以下文本文件test.txt来模拟您的输入

aaaa bbbb cccc  aaaa bbbb cccc dddd

这是正确的吗?

df = pd.read_csv('test.txt', delimiter = ' ', header = None)
0       1       2       3       4       5       6       7
0   aaaa    bbbb    cccc    NaN     aaaa    bbbb    cccc    dddd

并进一步处理数据帧

df = df.fillna('')
print(np.array(df.loc[0,:].to_list()).reshape(-1,4))
[['aaaa' 'bbbb' 'cccc' '']
['aaaa' 'bbbb' 'cccc' 'dddd']]

最新更新