Извлечь в строки в питоне / пандах - PullRequest
0 голосов
/ 22 марта 2020

У меня есть данные, объединенные в 1 ячейку в .csv, разделенных точками с запятой, пытаясь поместить их в свои собственные ячейки, вставленные друг под другом. Очень похоже на Excel "разбить текст на столбцы", но нужно, чтобы они go были разбиты на строки и выровнены друг под другом.

текущий datafame: enter image description here

Final Цель: enter image description here

Используемые данные: введите описание изображения здесь

1 Ответ

0 голосов
/ 22 марта 2020

Вы можете использовать .str.split (';'), чтобы развернуть столбцы. Сложная мысль - иметь дело со столбцами, которые не нужно разбивать. На мой взгляд, проще на самом деле преобразовать их в одну и ту же строку «строка с запятой» других столбцов, а затем просто перебрать все столбцы и развернуть все. Здесь часть кода с сокращенной версией набора данных. Надеюсь, это поможет вам.

import pandas as pd
import numpy as np 

df = pd.DataFrame({'User ID':[1,2],'salary':['65000;120000;70000','65000;120000;70000'],'gender':['male;male;female', 'male;male;female']})

print(df) 

Out:

   User ID              salary            gender
0        1  65000;120000;70000  male;male;female
1        2  65000;120000;70000  male;male;female

asd

cols_to_split = ['salary', 'gender']
cols_no_split = ['User ID']
expanded_rows = {}

# need the number of splits to fill 
n_splits = len(df[cols_to_split[0]].loc[0].split(";"))

# expand elements of columns with single values to fit the same format of the others 
for col in cols_no_split:
  df[col] = df[col].apply(lambda x: ''.join([str(x)+';' for i in range(n_splits)]))
  df[col] = df[col].apply(lambda x: x[:-1])

# iterate through every column to expand them 
for col in (cols_no_split + cols_to_split):

  expanded_rows[col] = df[col].str.split(';').apply(pd.Series,1).stack().values


df_final = pd.DataFrame(expanded_rows)

print(df_final) 

Out:

  User ID  salary  gender
0       1   65000    male
1       1  120000    male
2       1   70000  female
3       2   65000    male
4       2  120000    male
5       2   70000  female
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...