Pandas Split by delimiter, когда последний разделитель может не существовать - PullRequest
0 голосов
/ 12 ноября 2018

Я строю процесс ETL в Python с помощью Pandas.Я пытаюсь разделить некоторые плоские файлы по разделителю "_", в котором в столбце, который я хочу разделить, есть несколько строк, которые содержат 3 разделителя, а некоторые - 4 разделителя (как часть дополнительной информации),

В примере файл, который содержит 3 разделителя в столбце, если я добавлю столбец 5 и использую n = 4, это выдаст мне ошибку Columns must be same length as key, которая имеет смысл, так как есть только 3 разделителя (если яиспользуйте только 4 столбца и n = 3, это работает, но не то, что я хочу).

Как я могу обойти это, и когда он обнаруживает, дополнительный разделитель все еще разбивает его на столбец, а если не просто, оставляет этот столбец нулевым или пустым.Я также хочу указать значение, так как я не хочу, чтобы оно продолжало разделяться на каждый разделитель.Любая помощь будет удивительной!

df[['column1','column2','column3','column4',
'column5 may or may not exisit']] = df['Column_to_split'].str.split('_',n=4,expand=True)

Пример данных

0  Column_to_split  nextcolumn   nextcolumn   nextcolumn   nextcolumn
0  text_text_text   text2        text3        text4        23
1  text_text_text   text2        text3        text4        8

Желаемый результат

0  Column_to_split  Column_to_split1  Column_to_split2  Column_to_split3  Column_to_split4  nextcolumn   nextcolumn   nextcolumn   nextcolumn
0  text_text_text   text              text              text              null              text2        text3        text4        23
1  text_text_text   text              text              text              null              text2        text3        text4        8

1 Ответ

0 голосов
/ 13 ноября 2018

Может быть, я что-то упустил;этот подход работает для вас?

import pandas as pd

df = pd.DataFrame(["text1, text2, text3, text4", "text1, text2, text3, text4, text5"], columns=["column_name"])
print(df)

Вывод:

                         column_name
0         text1, text2, text3, text4
1  text1, text2, text3, text4, text5

Разделить один столбец на несколько столбцов:

df_split = df["column_name"].str.split(",", expand=True)
print(df_split)

Вывод:

       0       1       2       3       4
0  text1   text2   text3   text4    None
1  text1   text2   text3   text4   text5

Вы можете переименовать столбцы после этой операции.

df_split.rename(columns={0:"column1"}, inplace=True)
print(df_split)

Вывод:

  column1       1       2       3       4
0   text1   text2   text3   text4    None
1   text1   text2   text3   text4   text5

Альтернативный подход после вашего комментария:

df = pd.DataFrame([["text1, text2, text3, text4",
                   "text1, text2, text3, text4, text5"], 
                   ["text1, text2, text3, text4",
                   "text1, text2, text3, text4, text5"]],
                   columns=["column1", "column2"])
print(df)

list_of_dfs = []

for col in df.columns:
    temp_df = df[col].str.split(",", expand=True)
    print(temp_df)
    list_of_dfs.append(temp_df)

split_df = pd.concat(list_of_dfs)
print(split_df)

Пример вывода:

       0       1       2       3
0  text1   text2   text3   text4
1  text1   text2   text3   text4
       0       1       2       3       4
0  text1   text2   text3   text4   text5
1  text1   text2   text3   text4   text5
       0       1       2       3       4
0  text1   text2   text3   text4     NaN
1  text1   text2   text3   text4     NaN
0  text1   text2   text3   text4   text5
1  text1   text2   text3   text4   text5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...