如何将同时具有逗号和空格分隔符的CSV文件转换为仅具有空格分隔符的CSV文件

2024-04-30 01:33:55 发布

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

我正在尝试将包含两个值的最后一列以逗号分隔的形式转换为两个单独的列。请参阅输入和输出文件的最后几列以了解动机

下面是我的输入文件的样子:

fILENAME sent_no    word POS lab,Slab
File_1   sentence:1  abc NNP B,NO   
                     fhj PSP O,O    
                     bmm NNP B,NO   
                     vbn PSP O,O    
                     vbn NN  B,NO   
                     vbn NNPC B,NO  
                     .  Sym O,O 
File_1   Sentence:2 vbb NNP B,NO    
                    bbn PSP B,NO    
                    nnm NNP O,O 
                    nnn PSP B,NO    
                    bbn NN  O,O 
                    .   Sym O,O 

并输出输出文件我希望如下所示:

Filename sent_num word POS Label Slab
 File_1 sentence:1 abc NNP B     NO
                   fhj PSP O      O
                   bmm NNP B     NO
                   vbn PSP O      O
                   vbn NN B      NO
                   vbn NNPC B    NO
                   .   Sym O      O
 File_1 Sentence:2 vbb NNP B     NO
                   bbn PSP B     NO
                   nnm NNP O      O
                   nnn PSP B     NO
                   bbn NN  O      O
                   .   Sym O      O

Tags: 文件noposnnsentencewordsentfile
3条回答

我假设*.csv文件是

word POS lab,Slab
abc NNP B,NO
fhj PSP O,O
bmm NNP B,NO
vbn PSP O,O
vbn NN B,NO
vbn NNPC B,NO
vbb NNP B,NO
bbn PSP B,NO
nnm NNP O,O
nnn PSP B,NO
bbn NN O,O
. Sym O,O

您可以使用csv读取和写入特定的分隔符csv文件

import csv
with open(path, newline='') as csvf:
    rows = csv.reader(csvf, delimiter=' ')
    with open(new_path, 'w', newline='') as new_csvf:
        writer = csv.writer(new_csvf, delimiter=' ')
        for row in rows:
            slab = row[-1].split(',')[-1]
            row.append(slab)
            writer.writerow(row)

可以使用pandas将“逗号分隔”列分隔为两列

下面是一个数据帧示例

import pandas as pd
df = pd.DataFrame([['a,b'], ['c,d']], columns=['Label,Slabel'])

看起来像这样

    Label,Slabel
0   a,b
1   c,d

然后可以将值转换为列表,然后再转换为序列

df['Label,Slabel'].str.split(',').apply(pd.Series)

结果

    0   1
0   a   b
1   c   d

试试这个:

import pandas
df = pandas.read_csv('try.csv',sep=';')
df[['Label','Slabel']]=df['Label,Slabel'].str.split(',',expand=True)
df.drop(['Label,Slabel'],axis=1,inplace=True)
df.to_csv('try2.csv',sep=';')

但我使用多索引dataframe查看您的数据,因此我添加了以下内容:

df.set_index(['Filename','Sentence_num'],inplace=True)

结果是:

>>> df
                       Word  POS Label Slabel
Filename Sentence_num                        
File_1   sentence:1     abc  NNP     B     NO
         sentence:1     fhj  PSP     O      O
         sentence:1     bmm  NNP     B     NO
         sentence:1     vbn  PSS     O      O
File_2   sentence:2     vbb  NNP     B     NO
         sentence:2     bbn  PSP     B     NO
         sentence:2     nnm  NNP     O      O
         sentence:2    nnnm  PSP     B     NO
>>> 

简单地说,您可以像这样使用多重分隔符:

import pandas as pd
df = pandas.read_csv('try.csv',sep=' |,', engine='python') # separator space and comma

相关问题 更多 >