我试图将逗号分隔的表格中包含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
试试这个。
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
你可以用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
我猜想*.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)