Как разбить колонку с разделителем - PullRequest
2 голосов
/ 20 октября 2019

У меня есть .csv, и мне нужно разделить \ n с помощью

name,address
711-2880,Mankato\n96522\n(257) 563-7401
971-2880,CA\n965\n(01) 563-7401\nNebraska

Это мой код:

import pandas as pd
df = pd.read_csv('test.csv')
df.address = df.address.str.split('\n')

Мой вывод:

    name        address
---------------------------------------------------
0   711-2880    [Mankato\n96522\n(257) 563-7401]
1   971-2880    [CA\n965\n(01) 563-7401\nNebraska]

Ожидаемый результат:

    name        address
---------------------------------------------------
0   711-2880    [Mankato,96522,(257) 563-7401]
1   971-2880    [CA,965,(01) 563-7401,Nebraska]

Мне нужно применить разнесение после разделения на ,

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

Ваши данные в столбце address - это список, а не строка. Сначала вам нужно получить доступ к первому элементу этого списка (который является строкой), а затем выполнить разделение.

# Sample Data:
df = pd.DataFrame({
    "name": ['711-2880', '971-2880'], 
    "address": [['Mankato\n96522\n(257) 563-7401'], ['CA\n965\n(01) 563-7401\nNebraska']]}
)

>>> df['address'].apply(lambda col: col[0].split('\n'))
0      [Mankato, 96522, (257) 563-7401]
1    [CA, 965, (01) 563-7401, Nebraska]
Name: address, dtype: object

В случае, если некоторые записи адреса пусты, вы можете просто работать надподмножество, имеющее хотя бы один элемент списка (игнорируя данные, если в списке более одного элемента).

mask = df['address'].apply(len).gt(0)
df.loc[mask, 'address'] = df.loc[mask, 'address'].apply(lambda col: col[0].split('\n'))
1 голос
/ 20 октября 2019

Я скопировал и вставил ваши данные в файл .csv и прочитал их следующим образом, а затем разделил адрес с помощью лямбда-выражения следующим образом:

import pandas as pd
df = pd.read_csv('file.csv')
df

       name                           address
0  711-2880    Mankato\n96522\n(257) 563-7401
1  971-2880  CA\n965\n(01) 563-7401\nNebraska

df.address = df.address.apply(lambda x: x.split('\\n'))
df

       name                             address
0  711-2880    [Mankato, 96522, (257) 563-7401]
1  971-2880  [CA, 965, (01) 563-7401, Nebraska]

вы также можете сделать это по-своему, носделать это изменение:

df.address.str.split(r'\\n')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...