#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
, если по умолчанию,
. Если подход работает для вас, не стесняйтесь ставить галочку в качестве ответа.