Очистка данных в DataFrame - PullRequest
       0

Очистка данных в DataFrame

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

У меня есть данные, подобные приведенным ниже, в кадре данных pandas:

Address1 listboro:"Manhattan" listprice:1000000 listzip:"10001"
Address2 listprice:950000     listzip:"11205"   listboro:"Brooklyn"

Я хотел бы создать новый кадр данных, который выглядит следующим образом:

Address   listboro   listprice listzip
Address1  Manhattan  1000000   10001
Address2  Brooklyn   950000    11205

Есть две проблемыс исходным фреймом данных:

  1. данные расположены непоследовательно (различные элементы в разных столбцах)
  2. ненужные строки предшествуют каждой точке данных

Я хотел использоватьstartswith метод, описанный здесь и extraction метод, описанный здесь , но тот факт, что данные находятся в несогласованных столбцах, сбивает меня с толку.

1 Ответ

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

Я не знаю, как сортировать значения в каждой строке пандасного фрейма данных без простой перестройки нового фрейма данных.Подход: сортируйте каждую строку в numpy, встраивайте их в новый DataFrame и извлекайте поля данных с помощью Series.str.extract:

# Example DataFrame
          0                     1                  2                    3
0  Address1  listboro:"Manhattan"  listprice:1000000      listzip:"10001"
1  Address2      listprice:950000    listzip:"11205"  listboro:"Brooklyn"

# Copy values to numpy array, sort each row, and re-build the DataFrame
a = df.values
a.sort(axis=1)
df = pd.DataFrame(a)
df
          0                     1                  2                3
0  Address1  listboro:"Manhattan"  listprice:1000000  listzip:"10001"
1  Address2   listboro:"Brooklyn"   listprice:950000  listzip:"11205"

# Assign names to columns
df.columns = ['Address', 'listboro', 'listprice', 'listzip']

# Extract data fields
df['listboro'] = df['listboro'].str.extract('\"(.*)\"')
df['listprice'] = df['listprice'].str.extract('\:(.*)').astype(int)
# Do not convert extracted ZIP codes from str to int, because 
# some ZIP codes start with 0
df['listzip'] = df['listzip'].str.extract('\"(.*)\"')

df
    Address   listboro          listprice listzip
0  Address1  Manhattan  listprice:1000000   10001
1  Address2   Brooklyn   listprice:950000   11205
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...