PYTHON: разделение одного столбца на несколько после удаления нескольких строк - PullRequest
0 голосов
/ 30 октября 2018

Я довольно новичок в Python и пытаюсь очистить некоторые данные. Я прикрепил ссылку на файл данных (две вкладки: необработанные данные и желаемый результат). Пожалуйста, помогите!

Что я пытаюсь сделать:

  • Удалить строку 1-23
  • Разделить столбец B на несколько столбцов, используя «-» в качестве разделителя
  • Назначение имен столбцов новым столбцам
  • Сохранить числовые столбцы

Ссылка на необработанные данные (первая вкладка) и желаемый результат (вторая вкладка): https://www.dropbox.com/s/kjgtwoelq21eetw/Example2.xlsx?dl=0

Что у меня сейчас есть:

import numpy as np
data_xls=pd.read_excel("Example2.xlsx", index_col=None).fillna('')
data_xls = data_xls.iloc[22:]
data_xls.rename(columns=data_xls.iloc[0]).drop(data_xls.index[0])
data_xls['Internal Link Tracking (non-promotions) - ENT (c20)'].str.split('-', expand=True)

writer = pd.ExcelWriter('Output2.xlsx')
data_xls.to_excel(writer, 'O1', index=False)
writer.save()

Заранее большое спасибо за помощь! Тэ

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Чтобы разделить столбец на 2 столбца с пандами

d = pd.read_csv('file.csv ')

   col_1
    "val1-val2"
    "valA-valB"

df = pd.DataFrame(d.col_1.str.split("-",1).tolist(),columns = ['A','B'])

      A     B
0  val1  val2
1  valA  valB
0 голосов
/ 30 октября 2018

Попробуйте это:

1.) Удалить строку 1-23

df = pd.read_excel('/home/mayankp/Downloads/Example2.xlsx', sheet_name=0, index_col=None, header=None, skiprows=23)

2.) Разбить столбец B на несколько столбцов, используя «-» в качестве разделителя и 3.) Присвоить имена столбцов новым столбцам

Оба эти шага могут быть выполнены за один раз:

sub_df = df[1].str.split('-', expand=True).rename(columns = lambda x: "string"+str(x+1))

In [179]: sub_df
Out[179]: 
                       string1       string2             string3      string4     string5
1                           us      campaign            article1   scrolldown  findoutnow
2                           us      campaign            article1  scrollright        None
3                           us      campaign            article1   findoutnow        None
4                           us      campaign  payablesmanagement   findoutnow        None

Выше показано, как выглядит образец после разбиения на -.

Теперь удалите фактический столбец из df и вставьте в него новые столбцы:

df = df.drop(1, axis=1)
df = pd.concat([df,sub_df], axis=1)

4.) Сохранить числовые столбцы

Остальные столбцы уже не повреждены. Для этого не нужно никаких изменений.

Дайте мне знать, если это поможет.

0 голосов
/ 30 октября 2018

Использование:

# Read the excel file with sheet_name='Raw data' and skiprows=23 which are not necessary
data_xls = pd.read_excel("Example2.xlsx", sheet_name='Raw data', skiprows=23)

# Create the dummy columns names which are similar to desired output column
dummy_col_names = ['Internal Link Tracking (non','Campaign Name','Creative','Action','Action 2']
# Use str.split with expand=True to create a dataframe
dummy_df = data_xls['Internal Link Tracking (non-promotions) - ENT (c20)'].str.split('-',expand = True)
# Rename columns as per dummy column list
dummy_df.columns = dummy_col_names

# Drop the column which is not necessary
data_xls.drop('Internal Link Tracking (non-promotions) - ENT (c20)', axis=1, inplace=True)

# Use pd.concat along axis=1 to concat both data_xls and dummy_df along columns
data_xls = pd.concat((data_xls,dummy_df),sort=False,axis=1)

# To preserve oreder similar to desired output column use the following code
col_names = data_xls.columns.tolist()
data_xls = data_xls[col_names[:1]+dummy_col_names+col_names[1:-5]]
...