如何将有逗号和空格分隔符的CSV文件转换为只有空格分隔符的csv文件?

问题描述 投票:0回答:1

我试图将逗号分隔的表格中包含2个值的最后一列转换为2个独立的列。请看输入和输出文件的最后一列来理解其动机。

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

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
python python-3.x csv converters
1个回答
1
投票

试试这个。

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=';')

但我看到你的数据使用multiindex 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

1
投票

你可以用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

1
投票

我猜想*.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)
© www.soinside.com 2019 - 2024. All rights reserved.