Как столбец pandas строк, содержащих переменную длину и строки значений, разделенных запятыми, может быть объединен в отдельные значения? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь разделить определенные значения в столбце панд, чтобы любые "группы" значений стали отдельными значениями.

Код, который я сейчас использую для этого, выглядит следующим образом:

import csv
import pandas as pd 

data = pd.read_csv('ctabuses.csv')
route_column = data['routes']

with open('results.csv', 'wt+') as csv_file:
    writer = csv.writer(csv_file)
    for value in route_column:
        writer.writerow(value.split)

Однако, когда я записываю содержимое в файл, он производит это:

126

121,123

1,7,X28,126,129,130,132,151

1,7,X28,126,129,130,151

1,7,X28,126,129,130

1,7,X28,126,129

1,3,4,7,J14,26,X28,126,129,132,143,147,148

7,126,132,143,147

1,7,X28,126,129

3,4,6,J14,26,143

1,7,X28,126,129,151

1,7,X28,126,129,130,134,135,136,151,156

125,126

126

126

126

Я искал и пробовал все, что мог придумать, и продолжаю получать тот же результат.

Редактировать: Ожидаемый результат Мой ожидаемый результат, если я столкнусь с группой значений, подобной этой:

1,7,X28,126,129,130,134,135,136,151,156

Должно быть:

1
7
X28
126
129
130
134
135
136
151
156

Который затем будет использован для импорта в базу данных MySQL.

1 Ответ

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

Записная книжка: 2018-10-02_stack_strings_of_values.ipynb

Импорт:

import pandas as pd

Создать фрейм данных:

df = pd.read_csv('data.csv', header=None)

df.head()

                              0
0                           126
1                       121,123
2   1,7,X28,126,129,130,132,151
3       1,7,X28,126,129,130,151
4           1,7,X28,126,129,130

Строка к списку:

df_list = df.apply(lambda row: pd.Series(row).str.split(','))

df_list.head()

                                       0
0                                  [126]
1                             [121, 123]
2   [1, 7, X28, 126, 129, 130, 132, 151]
3        [1, 7, X28, 126, 129, 130, 151]
4             [1, 7, X28, 126, 129, 130]

Список к длинному:

df_long = df_list.apply(lambda x: pd.Series(x[0]), axis=1).stack().reset_index(level=1, drop=True)

df_long

0     126
1     121
1     123
2       1
2       7
2     X28
2     126
2     129
2     130
2     132
2     151
3       1
3       7
3     X28
3     126
3     129
3     130
3     151
...

Сохранить в формате csv:

df_long.to_csv('results.csv', index=False)

Окончательная программа (4 строки):

df = pd.read_csv('ctabuses.csv')
df_routes = df.routes.apply(lambda row: pd.Series(row).str.split(','))
df_routes = df_routes.apply(lambda row: pd.Series(row[0]), axis=1).stack().reset_index(level=1, drop=True)
df_routes.to_csv('results.csv', index=False)

Пожалуйста, не забудьтеПоставьте галочку рядом с выбранным ответом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...