我在导入包含多个分隔符的数据集时遇到问题。这些文件大多是制表符分隔的,但是有一个列有大约700个值,这些值都是以分号分隔的。
我看到了之前的类似问题,解决方案只是使用'sep'参数指定多个分隔符:
dforigin = pd.read_csv(filename, header=0, skiprows=6,
skipfooter=1, sep='\t|;', engine='python')
由于某种原因,这不起作用。如果我这样做,它看起来就像一团糟。到目前为止,我的解决方法是以tab分隔的形式导入文件,删除有问题的列('emg data',它位于最后一列右侧的屏幕外)并保存为临时.csv,重新导入数据,然后将其附加到初始数据帧。
我的解决方法感觉有点草率,我想知道是否有人可以帮助它变得更清洁。
答案 0 :(得分:2)
IIUC,您希望每个列中的分号分隔值占据数据框中的一列,以及文件中的其他初始列。在这种情况下,我建议您使用sep='\t'
读取文件,然后拆分分号列。
使用样本数据:
data = {'foo':[1,2,3], 'bar':['a;b;c', 'i;j;k', 'x;y;z']}
df = pd.DataFrame(data)
df
bar foo
0 a;b;c 1
1 i;j;k 2
2 x;y;z 3
带有新数据框的Concat df
,由拆分的分号列构成:
pd.concat([df.drop('bar', 1),
df.bar.str.split(";", expand=True)], axis=1)
foo 0 1 2
0 1 a b c
1 2 i j k
2 3 x y z
注意:如果您的实际数据不包含以分号分隔的列的列名,但如果它绝对是表中的最后一列,那么根据unutbu的建议,将df.bar
替换为df.iloc[:, -1]
}。