pandas 在数据框中的5个字符后添加逗号或分号

pxy2qtax  于 2023-04-10  发布在  其他
关注(0)|答案(4)|浏览(174)

我使用一个没有分隔符的txt文件。我想在前5个字符后添加逗号或分号,但我有点生疏。Txt文件(600行)看起来像这样:

DEU02 Allemagne
ANDMA Andorre 
AGOUT Angola 
JAMDC Anguilla (Île)

我正在寻找的输出是:

DEU02; Allemagne
ANDMA; Andorre 
AGOUT; Angola 
JAMDC; Anguilla (Île)
ui7jx7zq

ui7jx7zq1#

您可以按str访问器对值进行切片并添加;

df['col'] = df['col'].str[:5] + ';' + df['col'].str[5:]
print (df)
                     col
0       DEU02; Allemagne
1         ANDMA; Andorre
2          AGOUT; Angola
3  JAMDC; Anguilla (Île)

另一个想法是用Series.str.split创建2列:

df[['code','name']] = df['col'].str.split(n=1, expand=True)
print (df)
                    col   code            name
0       DEU02 Allemagne  DEU02       Allemagne
1         ANDMA Andorre  ANDMA         Andorre
2          AGOUT Angola  AGOUT          Angola
3  JAMDC Anguilla (Île)  JAMDC  Anguilla (Île)
83qze16e

83qze16e2#

如果你的数据是在一个dataframe中,你也可以使用str.replace来替换字符串开头的第5个字符位置(使用regex lookbehind),使用;

df['col'] = df['col'].str.replace(r'(?<=^.{5})', ';', regex=True)

输出:

0         DEU02; Allemagne
1           ANDMA; Andorre
2            AGOUT; Angola
3    JAMDC; Anguilla (Île)
jckbn6z7

jckbn6z73#

你真的不需要Pandas:

with open('in.txt') as f, open('out.txt', 'w') as f_out:
    for l in f:
        f_out.write(l[:5]+';'+l[5:])

另外,您可以利用read_csv

# read with one column for the first 5 characters
# one for the rest, then export with ";" as delimiter
(pd.read_csv('in.txt', sep=r'(?<=^\S{5})', header=None)
   .to_csv('out.txt', sep=';', index=False, header=None)
)

或者:

# read all file with one column, then replace and export
(pd.read_csv('in.txt', sep='--none--', header=None)
   [0].str.replace(r' ', '; ', n=1, regex=False)
   .to_csv('out.txt', header=None, index=False)
)
  • 或者对于5个字符的完全匹配:replace(r'(?<=^.{5})', ';', regex=True) .*

输出文件(out.txt):

DEU02; Allemagne
ANDMA; Andorre
AGOUT; Angola
JAMDC; Anguilla (Île)
lqfhib0f

lqfhib0f4#

另一种可能的解决方案:

df['col'].str.replace(r'^(.{5})', r'\1;', regex=True)

输出:

0         DEU02; Allemagne
1           ANDMA; Andorre
2            AGOUT; Angola
3    JAMDC; Anguilla (Île)
Name: col, dtype: object

相关问题