Разделитель для определенного столбца в CSV с использованием фреймов данных python

#python #pandas #dataframe

Вопрос:

ниже входная таблица находится в файле CSV, мне нужно применить разделитель для столбца кода на основе «/» и разделить значения на другие столбцы, а количество «/» будет меняться, оно не является постоянным, а также выходная таблица упоминается ниже, мне нужно добиться этого с помощью фреймов данных pandas

таблица ввода:

 date     ctr     code          
12-May   CN      1111/abc/12-e
12-May   CN      1112/abc/wds/12-e
12-May   CN      1113/abc/12-e
 

выходная таблица:

 date     ctr     code     Code1    code2  code3
12-May   CN      1111     abc      12-e
12-May   CN      1112     abc      wds    12-e
12-May   CN      1113     abc      12-e
 

Ответ №1:

Подробные сведения о шагах см. в комментариях к коду:

 import io
import pandas as pd

# data as a string
text = '''date     ctr     code          
12-May   CN      1111/abc/12-e
12-May   CN      1112/abc/wds/12-e
12-May   CN      1113/abc/12-e'''

# your original data frame
df = pd.read_csv(io.StringIO(text), sep=r's ')

# split code to new columns (0-based)
df2 = df.code.str.split("/", expand=True)

# rename new columns from 0-base to 1-based
df2 = df2.rename(columns=lambda x: f"code{int(x) 1}")

# join with original dataframe
df2 = df.join(df2)

# drop original code column
df2.drop(columns=['code'], inplace=True)

# test
print(df2)
 

Выходы:

      date ctr code1 code2 code3 code4
0  12-May  CN  1111   abc  12-e  None
1  12-May  CN  1112   abc   wds  12-e
2  12-May  CN  1113   abc  12-e  None
 

Комментарии:

1. Спасибо за помощь, код работает нормально, но «io.StringIO(текст)» я изменил его на «io.StringIO(путь к файлу и имя файла)» показывает пустой фрейм данных. Знаете ли вы, почему это происходит?

2. @Dev — Я не думаю, что вам вообще нужна эта io.StringIO часть — это просто для того, чтобы я мог видеть, что этот подход работает, используя строковый ввод, соответствующий вашему вопросу. В вашей среде вы можете использовать df = pd.read_csv(filepathamp;filename, sep=r's ') ?

3. df = pd.read_csv(import_path, sep=r’s ‘) Объект «Фрейм данных» не имеет атрибута «код» печать(df.head()) ниже приведен результат для инструкции печати, которую он прочитал с», » данные делиметра,ctr,код 12 мая,CN, 1111/abc/12-e

4. Спасибо, что он работает нормально, после удаления «sep=r’s «. Спасибо за вашу помощь

5. Правильно — если вы используете csv, тогда df = pd.read_csv('./test.csv', sep=',') или опустите sep , если по умолчанию , . Если подход работает для вас, не стесняйтесь ставить галочку в качестве ответа.